初始化Treemap比较器时的产生空指针异常
今天想用Treemap排序
先排序双列集合里的排序值。
在使用Comparator接口时 产生了问题
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class main {
public static void main(String[] args) {
Map<Integer,Integer>map=new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
int i=o2-o1;
i = i==0? map.get(o1).compareTo(map.get(o2)):i;
return i;
}
});
map.put(1, 3);
map.put(1, 2);
map.put(3, 1);
map.forEach((k,v)->System.out.println(k+" "+v));
}
}
这边eclipse给我反馈的是
未初始化双列集合
然后我想了好久才知道
传递比较器集合的时候 属于是初始化集合
而不是对已经存入数据的集合进行操作
即map集合还没有被完全初始化
那么就无法从map集合中获得对象 this关键字也不可以
所以应该这样 改
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Map<Integer, Integer> map = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
int result = o1 - o2;
if (result == 0) {
return o1.compareTo(o2);
}
return result;
}
});
map.put(1, 3);
map.put(2, 2);
map.put(3, 1);
map.forEach((k, v) -> System.out.println(k + " " + v));
}
}
但是好像Treemap的键只能映射一个值
传入已有的键后会覆盖映射值
所以这个问题应该本身就不对