treemap与hashcode

有个需求  需要将map排序

 

我就用了treemap

 

一个map列表   将总计字段放在最后面  其他无所谓

 

最开始是这样写的

Map<String,Object> temp = new TreeMap<>(new Comparator(){

@Override
public int compare(Object o1, Object o2) {
if(o2.toString().equals("总计")){
return -1;
}else{
return o2.hashCode()&Integer.MAX_VALUE;
}
}
});


后面运行的时候出现bug

明明应该很长的列表 总是只有 一个键值对 key:"" val"随便"

一顿debug
发现是比较器除了问题

一顿百度发现 坏就坏在空字符 hashcode treemap比较器三个东西合起来了

空字符的哈市code是0,treemap里的 比较器返回0 意思是 两者相同

所以空字符把其他键全覆盖了

后面改成

这样子就没问题了
Map<String,Object> temp = new TreeMap<>(new Comparator(){

@Override
public int compare(Object o1, Object o2) {
if(o2.toString().equals("总计")){
return -1;
}else{
return (o1.hashCode()-o2.hashCode())&Integer.MAX_VALUE;
}
}
});


还是姿势水平不够

这bug叠的

treemap 的比较器


public class TreeMapSortComparator implements Comparator<TreeMapSort> {
@Override
public int compare(TreeMapSort o1, TreeMapSort o2) {
int num = o1.getAge() - o2.getAge();
if(num==0){//为0时候,两者相同:
return 0;
}else if(num>0){//大于0时,后面的参数小:
return 1;
}else{//小于0时,前面的参数小:
return -1;
}

}
————————————————
版权声明:本文为CSDN博主「一叶一菩提魁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/A980719/article/details/120369766






posted @ 2023-01-13 11:09  霸王龙168  阅读(44)  评论(0)    收藏  举报