Сортировка HashMap

JavaBeginner
Практиковаться сейчас

Введение

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.