当自定义Comparator对TreeMap的key排序时,如果两个key的comparator相同,即compare方法的返回值为0的时候,会出现一个坑,如下:
TreeMap<Integer,Integer> map = new TreeMap<Integer,Integer>((a, b) -> wgt[a] - wgt[b]);
for(int i = 0; i < wgt.length; i++) {
map.put(i,weight[i]); //当此次put的元素的wgt与之前某个相同时,此次put不会成功
//System.out.println(map);
}
例如,当wgt = {0,0}时,打印结果如下:
{0=0}
{0=0}
而正确结果应为:
{0=0}
{0=0, 1=0}
正确的做法是,避免compare方法返回0,对两个key的comparator相同的情况进行处理,如下:
TreeMap<Integer,Integer> map = new TreeMap<Integer,Integer>((a, b) -> wgt[a] != wgt[b] ? wgt[a] - wgt[b] : a - b);
for(int i = 0; i < wgt.length; i++) {
map.put(i,weight[i]); //正确
}
这样就没有问题了。