Как отсортировать HashMap по значениям

Как мы видели в статьеКак отсортировать ArrayList< Т> . В этом уроке мы узнаем, как sort of the HashMap в java в порядке возрастания и убывания. Это почти то же самое, что и в ArrayList.  Мы создадим класс с именем "Comparator", реализующий интерфейс. Компаратор  для сравнения в двух примерах в этом руководстве.

1) Сортировка с помощью Comparator и поместите результат в TreeMap

Зачем передавать экземпляр класса Comparator в качестве параметра в конструкторе TreeMap?  Просто потому, что TreeMap< К, В> реализует интерфейс Map в виде HashMap и имеет конструктор TreeMap(Comparator comp). Единственное отличие состоит в том, что TreeMap сортируется по keys.

import java.util.Comparator; 
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class Tri {

public static void main(String[] args) {

HashMap map = new HashMap();
Компаратор comp = новый Компаратор(карта);
TreeMap map_apres = new TreeMap(comp);

map.put("A",49);
map.put("B",18);
map.put("C",92);
map.put("D",37);
map.put("E",62);

System.out.println("Перед сортировкой: "+map);
map_apres.putAll(карта);
System.out.println("После сортировки: "+map_apres);
}
}

class Comparator реализует Comparator {

Map кортеж;
public Comparator(HashMap map) {
this.tuple = map;
}

//этот компаратор упорядочивает элементы в порядке убывания
@Override
public int compare(Object o1, Object o2) {
// TODO Автоматически сгенерированный метод stub
if (int) tuple.get(o1) >= (int) tuple.get(o2)) {
return -1;
} else {
return 1;
}
}
}

2) Сортировка HashMap с помощью Collections.sort

В этом примере мы будем сортировать элементы типа Double. Элементы копируются в LinkedList, реализующий интерфейс List, а затем сортируются с помощью Collections.sort который мы использовали в предыдущих статьях для сортировки других коллекций объектов. После сортировки мы копируем отсортированные элементы из LinkedList в новую хеш-таблицу, которая будет возвращена в виде output.

public static void main(String[] args) {

HashMap map = new HashMap();

map.put("A",18.5);
map.put("E",76.8);
map.put("C",24.1);
map.put("F",86.2);
map.put("D",5.7);
map.put("B",84.6);

System.out.println("Перед сортировкой: "+map);
System.out.println("После сортировки: "+sortWithValue(map));
}

публичный статический HashMap< Строка, Double> sortWithValue( HashMap< Строка, Double> map ){
Список< Map.Entry< Строка, Double> > list =
новый LinkedList< Map.Entry< Строка, Double> > ( map.entrySet() );
Collections.sort( список, новый компаратор< Map.Entry< Строка, Double> > (){
public int compare( Map.Entry< Строка, Double> o1, Map.Entry< Строка, Double> o2 ){
return (o1.getValue()).compareTo( o2.getValue());
}
});

HashMap< Строка, Double> map_apres = новый LinkedHashMap< Строка, Double> ();
for(Map.Entry< Строка, Double> entry : list)
map_apres.put( entry.getKey(), entry.getValue() );
возврат map_apres;
}
Run:

Перед сортировкой: {D=5.7, E=76.8, F=86.2, A=18.5, B=84.6, C=24.1}
После сортировки: {D=5.7, A=18.5, C=24.1, E=76.8, B=84.6, F=86.2}
Чтобы отсортировать по убыванию, просто измените порядок сравнения в функции сравнения:

return(o2.getValue()).compareTo( o1.getValue()); 
References:
Документация Oracle - HashMap
TutorialsPoint - Класс HashMap
Компаратор документации
LinkedHashMap Документация