Java では、HashMap はキーと値のペアの並べ替えられていないコレクションです。 HashMap をその値で並べ替えるには、HashMap 自体が組み込みの並べ替えメソッドを提供していないため、外部の並べ替えアルゴリズムを使用できます。
一般的なアプローチの 1 つは、HashMap をそのリンクされたリストに変換することです。エントリを削除し、リンクされたリストを値で並べ替えて、HashMap を再構築します。このプロセス中にキーと値のペアがリンクされたままであることを確認するために、元のキーと値の順序を維持しながら値を比較するコンパレーターを使用します。
次のコード スニペットは、このアプローチを示しています。
import java.util.*; public class HashMapSorting { private static final boolean ASC = true; private static final boolean DESC = false; public static void main(String[] args) { // Creating dummy unsorted HashMap HashMap<String, Integer> unsortedMap = new HashMap<>(); unsortedMap.put("B", 55); unsortedMap.put("A", 80); unsortedMap.put("D", 20); unsortedMap.put("C", 70); System.out.println("Before sorting..."); printMap(unsortedMap); System.out.println("After sorting ascending order..."); Map<String, Integer> sortedMapAsc = sortByValue(unsortedMap, ASC); printMap(sortedMapAsc); System.out.println("After sorting descending order..."); Map<String, Integer> sortedMapDesc = sortByValue(unsortedMap, DESC); printMap(sortedMapDesc); } private static <K extends Comparable<K>, V extends Comparable<V>> Map<K, V> sortByValue(Map<K, V> unsorted, final boolean order) { List<Map.Entry<K, V>> list = new LinkedList<>(unsorted.entrySet()); list.sort((o1, o2) -> order ? o1.getValue().compareTo(o2.getValue()) == 0 ? o1.getKey().compareTo(o2.getKey()) : o1.getValue().compareTo(o2.getValue()) : o2.getValue().compareTo(o1.getValue()) == 0 ? o2.getKey().compareTo(o1.getKey()) : o2.getValue().compareTo(o1.getValue())); return list.stream().collect( Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b, LinkedHashMap::new ) ); } private static void printMap(Map<String, Integer> map) { for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); } } }
このコードは、元のキーと値の関係を維持しながら値を評価するコンパレーターを実装することにより、昇順と降順の両方の並べ替えを示します。
以上がJava HashMap をその値で昇順および降順に並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。