一、對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-tw/n/279502.html
微信掃一掃
支付寶掃一掃