
源码分析
文章平均质量分 88
努力前行的小蜗牛
这个作者很懒,什么都没留下…
展开
-
HashMap中容量为什么用2的幂次方,不用素数
众所周知,很多结构如Hashtable初始容量都用是11,用的素数,为了后期存数据的时候能后分布更均匀如果用合数,重新rehash后,之前在一组的数又会重新在一起,所以不分散,所以不采用HashMap为什么要求容量是2的幂次方呢?对,就用是之前在一组的数字,rehash之后会重新在一起。定义数字为n,容量为cap,cap为2的幂次方则一般取模运算为: n&(cap-1)举例...原创 2019-10-30 18:43:47 · 826 阅读 · 0 评论 -
找出int数字最高位的1对应的2幂次方
文章目录分析例子源码中的应用分析方法一:从左向右依次取该位bit,找到最高位1。复杂度是O(n), n为该数组的bit位方法二:将该数字的末尾全部置1,然后i - (i >>> 1)即可,复杂度O(1)数字1后面的值都设置为1算法: i |= (i >> 1); i |= (i >> 2); i ...原创 2019-10-29 15:58:41 · 994 阅读 · 0 评论 -
Java Object.hashCode()源码分析
文章目录hashcode介绍hashCode源码分析参考hashcode介绍hashcode是Object中的函数,所有类都拥有的一个函数,主要返回每个对象的hash值,主要用于哈希表中,如HashMap、HashTable、HashSet。哈希码的通用约定如下:在java程序执行过程中,在一个对象没有被改变的前提下,无论这个对象被调用多少次,hashCode方法都会返回相同的整数...原创 2019-08-23 18:25:18 · 14187 阅读 · 0 评论 -
PriorityQueue源码分析
优先队列内部实现是是堆,结构是数组,使用堆排序初始化容量11,如果拆入数的时候,大于当前队列数组容量,则扩容扩容方案:如果当前数组小于64,则扩容一倍,如果大于,则扩容50%, 这用Arrays.copyOf将原有数组放到另一块新的空间内部实现堆排序主要靠两个函数:堆排序,父节点:i,两个儿子节点:2i+1、2i+2最大堆为例(可以comparator来自定义优先级):sift...原创 2019-10-28 12:07:52 · 180 阅读 · 0 评论