算法
文章平均质量分 78
ESOO
君子不器
展开
-
这个坑,你要注意:Comparison method violates its general contract!
背景有部分业务需要进行排序,对比的对象是某实体里的金额(double 类型),这样,我们实现了自定义的比较类,结果运行一段时间之后报了错误:Comparison method violates its general contract! ,经过校验,发现错误出现在自定义排序上,经网上各种查阅资料发现是jdk7的兼容问题,以下将解决过程分享给大家。错误截图:重写的比较方法:解决方案先说如何解决,解决原创 2017-04-13 09:30:50 · 33736 阅读 · 6 评论 -
数学奇思:三角函数
最近老师再给中学部上课,我们有幸去听,发现对自己深受启发,我们以前的学习是直接扎进细节的,相对累,苦,闷的学习,而听完老师的讲课发现,三角函数的世界原来如此简单,如下图是用一个单位元来定义三角函数的基本原理,在这里,我们几乎都见过,但是为什么是单位圆?为什么三角函数只有一个角度a,为什么三角,为什么到了四角就习惯改为四边......等等问题,这些问题很关键,帮助我们抽离出三角函数这个抽象的概念...原创 2019-03-09 15:18:54 · 1218 阅读 · 0 评论 -
图解 偏向锁,轻量锁,重量锁
说明:卡通画像来自网络,如有侵权,联系博主删除原创 2019-02-28 18:10:04 · 2030 阅读 · 0 评论 -
avl树左旋右旋的理解
一直没搞懂非平衡二叉树变平衡二叉树时左旋右旋,今天下定决心搞懂,然后在众多博客中终于找到了这样一篇,非常形象,记录如下: AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adels...转载 2018-11-05 14:56:02 · 3864 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很转载 2017-09-26 17:32:17 · 482 阅读 · 1 评论 -
深入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 · 1920 阅读 · 2 评论 -
深入jdk——追踪Collections.sort 引发的bug(3)TimSort源码解读
本来准备看Java容器源码的。但是看到一开始发现Arrays这个类我不是很熟,就顺便把Arrays这个类给看了。Arrays类没有什么架构与难点,但Arrays涉及到的两个排序算法似乎很有意思。那顺便把TimSort算法和双指针快速排序也研究一下吧。首先强调一下,这是个稳定的排序算法看过代码之后觉得这个算法没有想象的那么难。逻辑很清晰,整个算法最大的特点就是充分利用数组中已经存在顺序。在归并的过程转载 2017-04-13 10:57:56 · 1737 阅读 · 2 评论 -
牛!用舞蹈演绎排序
找到完整版的排序算法舞蹈了,一起感受程序员的艺术吧。冒泡排序:http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb,选择排序:http://t.cn/hros6e插入排序:http://t.cn/hros0W快速排序:http://t.cn/ScTA1d归并排序:http://t.cn/Sc1cGZ转载 2017-04-13 09:13:14 · 2224 阅读 · 2 评论 -
深入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 · 1966 阅读 · 1 评论 -
二进制:并行二分法
题目:1000瓶毒药里面只有1瓶是有毒的,毒发时间为24个小时,问需要多少只老鼠才能在24小时后试出那瓶有毒。某个答案:10只倒着看,就是并行二分的过程倒着看,所以为什么结果就是直接做标记,中毒为1,就是第几瓶子,就一目了然了...原创 2019-04-04 10:58:16 · 978 阅读 · 0 评论