有个需求 需要将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
标签:return,Object,treemap,hashcode,new,o2,o1 From: https://www.cnblogs.com/bawanglong168/p/17049044.html