Как отсортировать HashMap по ключам в Java

Мы видели, как сортировать HashMap по значениям.  В этом уроке вы увидите, как упорядочить элементы по ключам с помощью класса TreeMap. Мы знаем, что HashMap не сохраняет порядок вставки элементов по умолчанию. В java Map или HashMap могут быть отсортированы по ключам или значениям.

1- Сортировка HashMap с помощью TreeMap

Этот код сортирует HashMap по ключам и основан на использовании   TreeMap.

import java.util.HashMap; 
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Triclés {

public static void main(String[] args) {

Map< Строка,Строка> hmap = новый HashMap< Строка,Строка> ();
hmap.put("4", "четыре");
hmap.put("2", "два");
hmap.put("3", "три");
hmap.put("1", "один");

Set set = hmap.entrySet();
Iterator iterator = set.iterator();
System.out.println("Перед сортировкой:");
while(iterator.hasNext()) {
Map.Entry me = (Map.Entry)iterator.next();
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}

Map sortedMap = new TreeMap(hmap);

Set set2 = sortedMap.entrySet();
Iterator iterator2 = set2.iterator();
System.out.println("После сортировки:");
while(iterator2.hasNext()) {
Map.Entry me2 = (Map.Entry)iterator2.next();
System.out.print(me2.getKey() + ": ");
System.out.println(me2.getValue());
}
}
}
Output:

Перед сортировкой: 
3: three
2: two
1: one
4: four
После сортировки:
1: один
2: два
3: три
4: четыре

2- Сортировка HashMap с помощью Comparator или Comparable

Вы также можете отсортировать карту, скопировав ключи в список, реализующий интерфейс java.util.List, а затем отсортируйте элементы, вызвав Collections.sort(). Здесь вы можете использовать оба интерфейса сортировки: Comparator или Сопоставимый  и выберите порядок возрастания или убывания, который вы хотите отобразить. После того, как список ключей создан, вы можете скопировать ключи и значения в новый HashMap.

import java.util.Collections; 
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class Triclés {

public static HashMap< Строка, строка> sortHashMap(Карта< Строка, строка> hmap){
Список< Map.Entry< Строка, строка> > list =
новый LinkedList< Map.Entry< Строка, строка> > ( hmap.entrySet() );
Collections.sort( список, новый компаратор< Map.Entry< Строка, строка> > (){
public int compare
(Map.Entry< Строка, строка> o1, Map.Entry< Строка, строка> o2 )
{
//сравнить два ключа
return (o1.getKey()).compareTo( o2.getKey() );
}
});

//создаем новый HashMap из LinkedList
HashMap< Строка, строка> hmapTriee = новый LinkedHashMap< Строка, строка> ();
для (Map.Entry< Строка, строка> entry : list)
{
hmapTriee.put( entry.getKey(), entry.getValue() );
}
return hmapTriee;
}

public static void main(String[] args) {

final HashMap< Строка, строка> hmap = новый HashMap< Строка, строка> ();

hmap.put("4", "четыре");
hmap.put("2", "два");
hmap.put("3", "три");
hmap.put("1", "один");

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

System.out.println("После сортировки: "+sortHashMap(hmap));
}
}
Output:

Перед сортировкой: {3=три, 2=два, 1=один, 4=четыре}
После сортировки: {1=один, 2=два, 3=три, 4=четыре}