Как отсортировать 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=четыре}