一、對Map的Key進行排序
Java中可以通過TreeMap對Map的Key進行排序。TreeMap是有序的鍵值對集合,它實現了SortedMap接口。
//創建TreeMap對象 TreeMap<String, String> map = new TreeMap<>(); //添加元素 map.put("d", "444"); map.put("b", "222"); map.put("c", "333"); map.put("a", "111"); //排序 for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); }
運行上述代碼,輸出如下:
a : 111 b : 222 c : 333 d : 444
由此可見,輸出的結果是按照Key進行了排序。
二、Map按照Key大小排序
如果我們想按照Key的大小進行排序,只需要將TreeMap中的泛型定義為<Integer, String>或<Long, String>,即可實現以Key大小為排序依據。
TreeMap<Integer, String> map = new TreeMap<>(); map.put(5, "555"); map.put(2, "222"); map.put(4, "444"); map.put(1, "111"); map.put(3, "333"); for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); }
運行上述代碼,輸出如下:
1 : 111 2 : 222 3 : 333 4 : 444 5 : 555
三、Map按照Key排序方法
Java中還可以通過Collections的sort()方法對Map的Key集合進行排序。Collections的sort()方法可以對List、Set和數組進行排序。
Map<String, String> map = new HashMap<>(); map.put("d", "444"); map.put("b", "222"); map.put("c", "333"); map.put("a", "111"); List<String> sortKeys = new ArrayList<>(map.keySet()); //進行排序 Collections.sort(sortKeys); for (String key : sortKeys) { System.out.println(key + " : " + map.get(key)); }
運行上述代碼,輸出如下:
a : 111 b : 222 c : 333 d : 444
四、Map根據Key排序
如果我們想根據Key的值進行排序,既可以使用TreeMap,也可以使用Collections的sort()方法。
方法一:
Map<Integer, String> map = new HashMap<>(); map.put(3, "333"); map.put(1, "111"); map.put(4, "444"); map.put(2, "222"); TreeMap<Integer, String> sortMap = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }); sortMap.putAll(map); for(Map.Entry<Integer, String> entry : sortMap.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); }
方法二:
Map<Integer, String> map = new HashMap<>(); map.put(3, "333"); map.put(1, "111"); map.put(4, "444"); map.put(2, "222"); List<Map.Entry<Integer, String>> list = new ArrayList<>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() { @Override public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) { return o1.getKey().compareTo(o2.getKey()); } }); for (Map.Entry<Integer, String> entry : list) { System.out.println(entry.getKey() + " : " + entry.getValue()); }
以上兩種方法實現的功能是一樣的,都是根據Key的值進行排序。
五、Map如何按照Key排序
以上已經詳細介紹了Java中如何對Map進行Key排序。總結起來,可以使用TreeMap或Collections的sort()方法來實現。
六、Map集合根據Key排序
在Java集合中,Map是最為常用的一種數據結構之一。由於數據的插入順序與輸出順序是無關的,因此我們需要對Map中的數據進行排序,以便更好地查找、遍歷和展示數據。
Java中,Map的Key有如下幾種排序方式:
- 自然排序:在Map中不能有null,必須是實現了Comparable接口的對象。
- 定製排序:在Map中可以有null,通過Comparator接口實現排序。
- 按照插入順序排序。
- 按照最近訪問時間排序。
對於第一種自然排序,我們已經在前面的例子中進行了詳細介紹,這裡不再贅述。
對於第二種定製排序,我們可以像前面例子中一樣使用TreeMap或Collections的sort()方法進行排序。
對於第三種按照插入順序排序,Java8中提供了LinkedHashMap類實現了按照插入順序排序,即插入順序與輸出順序相同。
Map<String, String> map = new LinkedHashMap<>(); map.put("d", "444"); map.put("b", "222"); map.put("c", "333"); map.put("a", "111"); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); }
運行上述代碼,輸出如下:
d : 444 b : 222 c : 333 a : 111
由此可見,輸出的結果是按照插入順序進行的。
對於第四種按照最近訪問時間排序,Java中的LinkedHashMap提供了相應的構造方法。可以使用accessOrder參數,將訪問順序作為排序依據。
Map<String, String> map = new LinkedHashMap<>(16, 0.75f, true); map.put("d", "444"); map.put("b", "222"); map.put("c", "333"); map.put("a", "111"); map.get("d"); map.get("c"); for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); }
運行上述代碼,輸出如下:
b : 222 a : 111 d : 444 c : 333
由此可見,輸出的結果是按照訪問順序進行的。
七、Map按key值排序
在C++中,map默認按照Key的值進行排序。而在Java中,因為Map中有兩個部分組成,即Key和Value,因此根據Key排序的方式也有不同。
Java中根據Key進行排序,以上已經詳細介紹了方法,可以使用TreeMap或Collections的sort()方法實現。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/279502.html