jdk
文章平均质量分 91
ESOO
君子不器
展开
-
这个坑,你要注意:Comparison method violates its general contract!
背景有部分业务需要进行排序,对比的对象是某实体里的金额(double 类型),这样,我们实现了自定义的比较类,结果运行一段时间之后报了错误:Comparison method violates its general contract! ,经过校验,发现错误出现在自定义排序上,经网上各种查阅资料发现是jdk7的兼容问题,以下将解决过程分享给大家。错误截图:重写的比较方法:解决方案先说如何解决,解决原创 2017-04-13 09:30:50 · 33654 阅读 · 6 评论 -
深入jdk——追踪Collections.sort 引发的bug(1)mergeSort
上篇博客介绍了因为重写比较方法引发的bug,这篇博客,咱们深入以下jdk对Collections.sort的实现,看看这个异常产生的原因,废话不多,先看源码:1,Collections.sortpublic static void sort(List list, Comparator c) { Object[] a = list.toArray(); Arrays原创 2017-04-13 09:59:35 · 1954 阅读 · 1 评论 -
深入jdk——追踪Collections.sort 引发的bug(3)TimSort源码解读
本来准备看Java容器源码的。但是看到一开始发现Arrays这个类我不是很熟,就顺便把Arrays这个类给看了。Arrays类没有什么架构与难点,但Arrays涉及到的两个排序算法似乎很有意思。那顺便把TimSort算法和双指针快速排序也研究一下吧。首先强调一下,这是个稳定的排序算法看过代码之后觉得这个算法没有想象的那么难。逻辑很清晰,整个算法最大的特点就是充分利用数组中已经存在顺序。在归并的过程转载 2017-04-13 10:57:56 · 1732 阅读 · 2 评论 -
深入jdk——追踪Collections.sort 引发的bug(2)TimSort思路
1. 为什么写这篇文章这篇文章的根源是在产品中发现了一个诡异的bug:只能在产品环境下重现,在我的本地开发环境无法重现,而双方的代码没有任何区别。最后用remotedebug的方法找到异常所在:Exception in thread "main"java.lang.IllegalArgumentException: Comparisonmethod violates its general con原创 2017-04-13 10:57:21 · 1898 阅读 · 2 评论