Java 对 map<Integer,Integer> 按照 value排序,value相等 则按照 key排序
时间: 2024-11-28 22:28:13 浏览: 5
在Java中,如果你想对`Map<Integer, Integer>`按照值(value)进行排序,然后当值相同时,再按照键(key)进行排序,你需要创建一个新的`SortedMap`实例。由于`Map`本身并不保证排序,我们可以借助`LinkedHashMap`,它维护了插入顺序,或者`TreeMap`,它默认按照键的自然顺序(或自定义的Comparator)排序。
如果你想要保持原有的键值对应关系,可以使用`TreeMap`,因为`TreeMap`的构造器允许传递一个Comparator,我们可以定义一个自定义的Comparator来完成排序:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<Integer, Integer> unsortedMap = new HashMap<>();
// ... 填充map
// 使用TreeMap,设置Comparator首先按照value排序,然后value相等时按照key排序
Comparator<Map.Entry<Integer, Integer>> comparator =
(e1, e2) -> {
if (e1.getValue().equals(e2.getValue())) {
return Integer.compare(e1.getKey(), e2.getKey());
} else {
return Integer.compare(e1.getValue(), e2.getValue());
}
};
SortedMap<Integer, Integer> sortedMap = new TreeMap<>(comparator);
sortedMap.putAll(unsortedMap);
// 现在sortedMap就是按照指定规则排序的
for (Map.Entry<Integer, Integer> entry : sortedMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
//
阅读全文