Java treemap倒序,treemap可以排序?

Java treemap倒序,treemap可以排序?

北大青鸟长沙麓谷校区      2022-05-05 10:42:01     46

Java treemap倒序,treemap可以排序?,我们都知道,TreeMap是一个逻辑集合,开发者按照手拉手的方式将元素连接到一起,而且会按照元素的大小排序.所以,我们在使用的时候必

课程价格 请咨询

上课时段: 授课校区:

详细介绍

我们都知道,TreeMap是一个逻辑集合,开发者按照手拉手的方式将元素连接到一起,而且会按照元素的大小排序.

所以,我们在使用的时候必须,所要存储的元素的Key必须要有比较的功能(实现Comparable接口,重写compareTo方法)或者使用一个第三方的比较器(Comparator接口的子类,重写compare方法).

当我们存储一个元素的时候,集合就会用这个元素的Key和集合内部的元素的Key进行比较,如果这个比较方法返回一个小于零的数,则会将存入的元素放到被比较元素的左边,如果返回一个大于零的数,则会方法被比较元素的右边,返回0则不存入.   

背景

有一次开发中,需要根据老人的年龄排个序,所以直接就使用TreeMap集合,将老人的年龄当作Key存入集合,同时为了避免将年龄相同的元素过滤掉,在使用比较器的时候,如果两个元素的年龄相同则返回-1.让新的元素存到老元素的左边

但是后来在通过key获取值的时候发现,如果如何获取,结果总会是null,但是集合中确实有这个元素,使用迭代器可以获取到正确值,测试了好多次都是这样的结果

解决

后来通过查看源码才发现,TreeMap的get(key)方法和HashMap不同,HashMap是通过比较key计算出一个角标,然后获取数组中对应角标上的值.

而TreeMap是通过将方法中参数key和集合内部的key进行对比,如果比较的结果是0,则表示找到了要找的元素,可是,这个方法中使用的比较方法和存入时使用的比较方法是一样的,都是我们开始指定的比较器中的比较方法.

这就导致一个现象,比较器永远无法返回0,如果相等则会返回-1,那么集合就认为,你要找的元素还在左边,就会一直找下去,直到找到null,然后把null返回去

所以我们获取到的值永远都是null

总结

如果你想在排序的同时又想保留重复的元素,绝对不要使用Tree系列的集合

以上就是北大青鸟长沙麓谷校区java培训机构的小编针对“Java treemap倒序,treemap可以排序?”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

培训啦提醒您:交易时请核实对方资质,对于过大宣传或承诺需谨慎!任何要求预付定金、汇款等方式均存在风险,谨防上当。