初始化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给我反馈的是 alt

未初始化双列集合

然后我想了好久才知道

传递比较器集合的时候 属于是初始化集合

而不是对已经存入数据的集合进行操作

即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的键只能映射一个值

传入已有的键后会覆盖映射值

所以这个问题应该本身就不对

alt

全部评论

相关推荐

09-04 21:52
南京大学 Java
牛马人的牛马人生:果然是华五的神
点赞 评论 收藏
分享
08-27 12:02
已编辑
南京外国语学校 网络安全
再来一遍:实则劝各位不要all in华子,不要相信华为hr
点赞 评论 收藏
分享
10-23 16:33
门头沟学院 Java
本人某中9本科,成绩中等,目前没科研没实习,目前后端学到了javaWeb,开始没定好方向,在学国外课程,走工程路线起步有点晚了,到这个时间点了还在学JavaWeb,顿感迷茫,不知道是坚持走下去还是寒假去准备考研。考研这个路弄得我还是心痒痒的,因为从众考研的人也不在少数,所以会有这方面的心理安慰吧,就是“不行我可以去考研啊”,而且意味着三年的缓冲,为了复试还有积攒经验美化简历,其实现在也可以去申入实验室打杂;就业可能意味着多些工作经验,工程岗应该到后面还是经验大于学历?还是有点迷茫了,求助好心人有无路线启发
千千倩倩:同27给点建议,现在这个时间点可以快速看完外卖和点评,不用跟着敲,但一定要在看的时候总结每个部分的整个业务流程,对其中的实现有一个大概的印象。然后直接开始看八股,刷算法。八股和算法最好还是在项目学习中穿插着看。如果计算机基础,算法这些基础好,加上每天刻苦学习,两周可以达到勉强能面试的水平,到时候就直接海投中小厂,在约面和面试的过程中不断巩固知识。没找到实习也没关系,就当积累经验。再沉淀一波直接明年三月开始投暑期,毕竟是9本,总是有面试机会的,只要你这三个月不懈怠,面试发挥得一定不错,只要拿到一个中,大厂暑期实习,秋招就有竞争力了。总得而言,现在还有机会,但是时间非常紧张,需要你结合自己情况考虑,共勉
你会选择考研还是直接就业
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务