TreeMap
在需要使用的排序的时候,课使用TreeMap。自定义排序规则,一般有两种方式。
-
自定义Comparator
-
key对象实现Comparable的compareTo方法
问题
有一个需求要根据开课时间排序,我自定义了一个Comparator的TreeMap,把HashMap的使用putAll导入到TreeMap中,代码如下:
Map<Long, List<HomeworkDto>> hashMap = buildMap();
Map<Long, List<HomeworkDto>> treeMap = new TreeMap<>((o1, o2) -> {
Long t1 = getStartTime(o1);
Long t2 = getStartTime(o2);
if (t1 < t2){
return -1;
} else if (t1.equals(t2)){
return 0;
}
return 1;
});
treeMap.putAll(hashMap);
有一次运营反馈一条数据不见了,排查了半天,最后定位到时导入数据到TreeMap这一步导致数据丢失了。我模拟了有问题的数据,打印出来的数据让我不得骑姐。
hashMap========={2000004660741715=[], 2000004660741698=[HomeworkDto{id=1032875, topicId=2000004660741698, title=拓展课-2作业}], 2000004660741730=[HomeworkDto{id=1031448, topicId=20000046607

在使用TreeMap进行自定义排序时,通过Comparator或Comparable实现。一次运营反馈数据丢失,发现当开课时间相同,TreeMap的put方法会覆盖key相等的值。通过查看源码,了解到在key相等情况下会更新value,解决办法是修改比较器避免返回0或考虑其他判断方式。
最低0.47元/天 解锁文章
2960

被折叠的 条评论
为什么被折叠?



