Java集合类源码分析
Java集合类介绍和源码分析
打不死Gin
打不倒我的将被我打败
展开
-
辟谣!!HashMap中变量modCount的真实作用
一些结论在网上搜索HashMap中变量modCount的作用时,大部分的解释都是这样:Fail-Fast 机制我们知道 java.util.HashMap 不是线程安全的,因此如果在使用迭代器的过程中有其他线程修改了map,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。这一策略在源码中的实现是通过 modCount 域,modC...原创 2020-04-13 10:43:53 · 2232 阅读 · 0 评论 -
大多数人不清楚的:for循环与foreach循环的性能差距
目录一、ArrayList中,for循环 VS 增强for二、LinkedList中,for循环 VS 增强for三、剖析ArrayList中两者性能的原理1.ArrayList的底层数据结构2.ArrayList中get方法的实现3.ArrayList中iterator方法的实现4.小结四、剖析LinkedList中两者性能的原理1.LinkedList的底层数据结构2.LinkedList中g...原创 2020-04-09 10:29:29 · 1476 阅读 · 0 评论 -
干了这篇博文,LinkedList源码任你分析
目录1.数据结构2.属性3.Node类结构图源码有参构造图解4.辅助方法(1)void linkFirst(E e)源码图解(2)void linkLast(E e)源码图解(3)void linkBefore(E e, Node< E> succ)源码图解(4)E unlinkFirst(Node< E> f)源码图解(5)E unlinkLast(Node< E&...原创 2020-01-02 14:09:42 · 2904 阅读 · 0 评论 -
HashMap源码分析JDK8:tieBreakOrder方法
分析新增节点key的类在定义时没有实现Comparable接口或者新增节点key实现了Comparable接口但是与当前节点还是compareTo不出结果,那么就动用这个方法来最终决定dir是正是负。源码分析 /** * 为什么说这个方法能最终决定dir的正、负, * 因为它只有-1、1两种输出结果 * * 参数a:新增节点的key * 参数b:当前节点的key */ ...原创 2019-12-25 16:31:31 · 373 阅读 · 0 评论 -
HashMap源码分析JDK8:compareComparables方法
源码分析 /** * 参数kc:新增节点key的类型 * 参数k:新增节点的key * 参数x:当前节点的key */ @SuppressWarnings({"rawtypes","unchecked"}) static int compareComparables(Class<?> kc, Object k, Object x...原创 2019-12-25 16:28:17 · 418 阅读 · 0 评论 -
HashMap源码分析JDK8:comparableClassFor方法
源码分析 /** * Returns x's Class if it is of the form "class C implements * Comparable<C>", else null. * * 如果x的类的形式为“Class C implements Comparable<C>”,则返回x的类型 * 否则返回null ...原创 2019-12-25 16:27:44 · 213 阅读 · 0 评论 -
HashMap源码分析JDK8:getNode方法
源码分析 /** * Implements Map.get and related methods * * @param hash hash for key * @param key the key * @return the node, or null if none */ final Node<K,V> getN...原创 2019-12-24 10:24:22 · 369 阅读 · 0 评论 -
HashMap源码分析JDK8:putVal方法
HashMap底层数据结构插入的所有情况源码分析 /** * 实现Map接口的put方法和相关功能 * * 参数hash:新增键值对中key的哈希值 * 参数key:新增键值对的键key * 参数value:新增键值对的值value * 参数onlyIfAbsent: 如果是true,不改变键值对中的旧值 * 参数ev...原创 2019-12-24 10:20:38 · 222 阅读 · 0 评论 -
HashMap源码分析JDK8:treeifyBin方法
HashMap底层数据结构源码分析 /** * 在满足一定条件的情况下,将链表转换成红黑树 * * 形参tab:成员变量table * 形参hash:新增键值对中key的hash值 */ final void treeifyBin(Node<K,V>[] tab, int hash) { int n, index; ...原创 2019-12-24 10:20:23 · 547 阅读 · 0 评论 -
HashMap源码分析JDK8:balanceInsertion方法
一、插入的所有情况二、源码static <K,V> TreeNode<K,V> balanceInsertion(TreeNode<K,V> root,TreeNode<K,V> x) { //新插入树节点默认红色 x...原创 2019-12-20 17:13:56 · 325 阅读 · 0 评论 -
ArrayList源码详细分析JDK1.8(一)
目录一、数据结构二、主要属性三、构造方法1.ArrayList()源码图解2.ArrayList(int initialCapacity)源码图解3.ArrayList(Collection<? extends E> c)源码图解3.add方法4.实验(1)空参构造(2)空参构造,add一个元素,elementData数组默认长度为10(3)空参构造,add大于10个元素,elemen...原创 2019-10-14 11:06:21 · 307 阅读 · 0 评论 -
JDK8:LinkedList源码分析
目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑...原创 2019-10-11 15:37:18 · 474 阅读 · 2 评论 -
ArrayList源码详细分析JDK1.8(二)
目录前言1.属性2.Object get(int index)3.int size()4.Object remove(int index)5.void clear()6.Object set(int index,Object obj)前言在java ArrayList源码超详细分析JDK1.8(一)中我们详细分析了ArrayList中最核心的add方法。1.属性//elementData数...原创 2019-09-29 15:08:49 · 218 阅读 · 0 评论