【发布时间】:2020-03-09 15:54:37
【问题描述】:
SortedMap<Integer, Long> newMap = new TreeMap(new MyComparator(result));
newMap.putAll(result);
System.out.println("new map ---> " + newMap);
MyComparator.java
package com.example.admin.app;
import java.util.Comparator;
import java.util.Map;
class MyComparator implements Comparator {
Map map;
public MyComparator(Map map){
this.map = map;
}
public int compare (Object o1, Object o2) {
return ((Long) map.get(o2)).compareTo((Long) map.get(o1));
}
}
在使用树形图比较器时,如果 2 个键的值相同,则比较器只考虑第一个值而忽略第二个值。
例如:未排序的地图 -> {2=93085, 1=93254, 4=92928, 9=93164, 8=93085}
我编写的代码的实际结果:{1=93254, 9=93164, 8=93085, 4=92928}
我需要这样的输出 --> {1=93254, 9=93164, 8=93085, 2=93085, 4=92928}
由于键 2 和 8 具有相同的值 (93085),我只得到一个。有人请帮忙。
【问题讨论】:
-
你是什么意思
I'm getting only one你能显示代码吗? -
欢迎来到stackoverflow!为了让我们帮助您,您可以发布您正在使用的比较器代码吗?
-
显示您的代码。
-
Comparator使用的TreeMap比较的是键,而不是值。您的代码中一定有其他原因导致此问题。 -
@JacobG。我认为如果比较器返回 0,TreeMap 会将其解释为相同的键值,并将之前的值替换为新的值
标签: java sorting hashmap comparator treemap