Введение
HashMap - это коллекция, которая хранит пары ключ-значение. Однако она не хранит пары ключ-значение в каком-либо определенном порядке и не сохраняет порядок вставки элементов. Возможно, будут случаи, когда мы захотим просмотреть хранящиеся данные в отсортированном виде. В таких случаях нам нужно отсортировать HashMap.
Создайте новый Java-файл
Во - первых, нам нужно создать новый Java - файл, чтобы написать код для сортировки HashMap. Откройте терминал и перейдите в директорию, где вы хотите создать файл. Используйте следующую команду, чтобы создать новый файл с именем HashMapSortDemo.java.
touch HashMapSortDemo.java
Сортировка по ключам с использованием Collections.sort()
Мы можем отсортировать HashMap по ключам с использованием метода Collections.sort(). Следуйте коду ниже:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry;
public class HashMapSortDemo {
public static void main(String args[]) {
HashMap<String, Integer> unsortedMap = new HashMap<>();
unsortedMap.put("one", 1);
unsortedMap.put("two", 2);
unsortedMap.put("three", 3);
unsortedMap.put("four", 4);
unsortedMap.put("five", 5);
System.out.println("Printing the Unsorted HashMap");
for(Entry<String, Integer> e : unsortedMap.entrySet()) {
System.out.println(e.getKey() + "-->" + e.getValue());
}
ArrayList<String> sortedList = new ArrayList<>(unsortedMap.keySet());
Collections.sort(sortedList);
System.out.println("\nPrinting the Alphabetically Sorted Keys");
for(String s : sortedList) {
System.out.println(s + "-->" + unsortedMap.get(s));
}
}
}
В приведенном выше коде HashMap сортируется по ключам с использованием метода Collections.sort().
Используйте следующую команду для компиляции и запуска кода:
javac HashMapSortDemo.java && java HashMapSortDemo
Сортировка по значениям с использованием Collections.sort()
Мы можем отсортировать HashMap по значениям с использованием метода Collections.sort(). Следуйте коду ниже:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry;
public class HashMapSortDemo {
public static void main(String args[]) {
HashMap<String, Integer> unsortedMap = new HashMap<>();
unsortedMap.put("one", 1);
unsortedMap.put("two", 2);
unsortedMap.put("three", 3);
unsortedMap.put("four", 4);
unsortedMap.put("five", 5);
System.out.println("Printing the Unsorted HashMap");
for(Entry<String, Integer> e : unsortedMap.entrySet()) {
System.out.println(e.getKey() + "-->" + e.getValue());
}
ArrayList<Integer> sortedList = new ArrayList<>(unsortedMap.values());
Collections.sort(sortedList);
System.out.println("\nPrinting the Sorted Values");
for(Integer i : sortedList) {
System.out.println(i);
}
}
}
В приведенном выше коде HashMap сортируется по значениям с использованием метода Collections.sort().
Используйте следующую команду для компиляции и запуска кода:
javac HashMapSortDemo.java && java HashMapSortDemo
Сортировка по ключам с использованием TreeMap
Мы можем отсортировать HashMap по ключам с использованием TreeMap. TreeMap автоматически хранит пары ключ-значение в отсортированном порядке (отсортирован по ключам). Следуйте коду ниже:
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.TreeMap;
public class HashMapSortDemo {
public static void main(String args[]) {
HashMap<String, Integer> unsortedMap = new HashMap<>();
unsortedMap.put("one", 1);
unsortedMap.put("two", 2);
unsortedMap.put("three", 3);
unsortedMap.put("four", 4);
unsortedMap.put("five", 5);
System.out.println("Printing the Unsorted HashMap");
for(Entry<String, Integer> e : unsortedMap.entrySet()) {
System.out.println(e.getKey() + "-->" + e.getValue());
}
TreeMap<String, Integer> sortedMap = new TreeMap<>(unsortedMap);
System.out.println("\nPrinting the Sorted TreeMap");
for(Entry<String, Integer> e : sortedMap.entrySet()) {
System.out.println(e.getKey() + "-->" + e.getValue());
}
}
}
В приведенном выше коде HashMap сортируется по ключам с использованием TreeMap.
Используйте следующую команду для компиляции и запуска кода:
javac HashMapSortDemo.java && java HashMapSortDemo
Сортировка по значениям с использованием TreeSet
Мы можем отсортировать HashMap по значениям с использованием TreeSet. TreeSet также хранит данные в отсортированном порядке (отсортирован по значениям). Следуйте коду ниже:
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.TreeSet;
public class HashMapSortDemo {
public static void main(String args[]) {
HashMap<String, Integer> unsortedMap = new HashMap<>();
unsortedMap.put("one", 1);
unsortedMap.put("two", 2);
unsortedMap.put("three", 3);
unsortedMap.put("four", 4);
unsortedMap.put("five", 5);
unsortedMap.put("fourteen", 4);
unsortedMap.put("fifteen", 5);
unsortedMap.put("twenty", 2);
System.out.println("Printing the Unsorted HashMap");
for(Entry<String, Integer> e : unsortedMap.entrySet()) {
System.out.println(e.getKey() + "-->" + e.getValue());
}
TreeSet<Integer> sortedSet = new TreeSet<>(unsortedMap.values());
System.out.println("\nThe sorted values are: " + sortedSet);
}
}
В приведенном выше коде HashMap сортируется по значениям с использованием TreeSet.
Используйте следующую команду для компиляции и запуска кода:
javac HashMapSortDemo.java && java HashMapSortDemo
Сортировка с использованием Stream и лямбда-выражений
Мы можем отсортировать HashMap в одну строку кода, используя Java Streams и Lambda-выражения. Следуйте коду ниже:
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Stream;
public class HashMapSortDemo {
public static void main(String args[]) {
HashMap<String, Integer> unsortedMap = new HashMap<>();
unsortedMap.put("one", 1);
unsortedMap.put("two", 2);
unsortedMap.put("three", 3);
unsortedMap.put("four", 4);
unsortedMap.put("five", 5);
System.out.println("Printing the Unsorted HashMap");
for(Entry<String, Integer> e : unsortedMap.entrySet()) {
System.out.println(e.getKey() + "-->" + e.getValue());
}
Stream<Entry<String, Integer>> sortedStream = unsortedMap.entrySet()
.stream()
.sorted(Map.Entry.<String, Integer>comparingByKey());
System.out.println("\nPrinting the Sorted Key-Value Pairs");
sortedStream.forEach(System.out :: println);
}
}
В приведенном выше коде HashMap сортируется с использованием Java Streams и Lambda-выражений.
Используйте следующую команду для компиляции и запуска кода:
javac HashMapSortDemo.java && java HashMapSortDemo
Сортировка по значениям с использованием Stream и лямбда-выражений
Мы также можем отсортировать HashMap по значениям, используя Java Streams и Lambda-выражения. Следуйте коду ниже:
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Stream;
public class HashMapSortDemo {
public static void main(String args[]) {
HashMap<String, Integer> unsortedMap = new HashMap<>();
unsortedMap.put("one", 1);
unsortedMap.put("two", 2);
unsortedMap.put("three", 3);
unsortedMap.put("four", 4);
unsortedMap.put("five", 5);
System.out.println("Printing the Unsorted HashMap");
for(Entry<String, Integer> e : unsortedMap.entrySet()) {
System.out.println(e.getKey() + "-->" + e.getValue());
}
Stream<Entry<String, Integer>> sortedStream = unsortedMap.entrySet()
.stream()
.sorted(Map.Entry.<String, Integer>comparingByValue());
System.out.println("\nPrinting the Sorted Key-Value Pairs");
sortedStream.forEach(System.out :: println);
}
}
В приведенном выше коде HashMap сортируется по значениям с использованием Java Streams и Lambda-выражений.
Используйте следующую команду для компиляции и запуска кода:
javac HashMapSortDemo.java && java HashMapSortDemo
Использование библиотеки Google Guava
Библиотека Google Guava предоставляет нам класс ImmutableSortedMap. Мы можем использовать метод copyOf() этого класса для сортировки HashMap. Следуйте коду ниже:
import java.util.HashMap;
import java.util.Map.Entry;
import com.google.common.collect.ImmutableSortedMap;
public class HashMapSortDemo {
public static void main(String args[]) {
HashMap<String, Integer> unsortedMap = new HashMap<>();
unsortedMap.put("one", 1);
unsortedMap.put("two", 2);
unsortedMap.put("three", 3);
unsortedMap.put("four", 4);
unsortedMap.put("five", 5);
System.out.println("Printing the Unsorted HashMap");
for (Entry<String, Integer> e : unsortedMap.entrySet()) {
System.out.println(e.getKey() + "-->" + e.getValue());
}
ImmutableSortedMap<String, Integer> sortedMap = ImmutableSortedMap.copyOf(unsortedMap);
System.out.println("\nPrinting the Sorted ImmutableSortedMap");
System.out.println(sortedMap);
}
}
В приведенном выше коде HashMap сортируется с использованием библиотеки Google Guava.
Используйте следующую команду для компиляции и запуска кода:
javac -cp ".:guava-30.1.1-jre.jar" HashMapSortDemo.java && java -cp ".:guava-30.1.1-jre.jar" HashMapSortDemo
Уборка
Наконец, удалите файл HashMapSortDemo.java с помощью следующей команды:
rm HashMapSortDemo.java
Резюме
В этом практическом занятии мы рассмотрели, как сортировать HashMap по ключам или значениям. Мы использовали разные методы, такие как Collections.sort(), TreeMap, TreeSet, Java Streams и Lambda-выражения, а также библиотеку Google Guava для сортировки HashMap. Мы также узнали о их случаях использования и о том, как можно написать эффективный код для сортировки HashMap на Java.



