java集合
文章平均质量分 52
Java集合源码
码海拾贝2023
享受技术
展开
-
LinkedHashMap源码
目录原理扩展点小结原理LinkedHashMap继承自HashMap, 所以大部分代码其实都是HashMap的,仅仅在一些扩展点上做了扩展 所谓的有序,指的是可以按照元素添加的顺序进行遍历扩展点put方法 ,重写了 newNode() 方法, 原先替换了原先HashMap中的node节点, LinkedHashMap中的node继承自HashMap中的node,增加before,after节点, 用来组成有顺序的链表 remove方法 重写了 afterNodeRemov...原创 2023-03-15 09:33:11 · 1728 阅读 · 1 评论 -
Iterator迭代器应对多线程并发修改的fail fast机制
目录是什么原理小结是什么就是在迭代器取数据的同时, 有线程并发更改元素(增删改)原理//迭代器初始化的时候 会拿到集合中的modcount(这个数据,在发生变更的时候会增加次数)int expectedModCount = modCount; //在迭代器的next()方法每次执行之前会调用方法checkForComodification();//每次判断数量,一旦发生变化, 则抛出ConcurrentModificationException异常final void原创 2023-03-15 09:32:59 · 1917 阅读 · 1 评论 -
HashMap源码
基本原理底层是数组+链表(单项链表)+红黑树(链表长度超过8) 数组的初始大小是16 当元素数量超过容量*负载因子(默认0.75)进行扩容 每次扩容都是扩充到原先的两倍+rehash优化后的hash算法jdk8以后寻址算法并不是先拿到hashcode然后再跟容量进行取模操作, 而是经过优化的 获取hashcode, 然后右移16位, 然后与旧的hashcode进行异或操作, 然后让获得的值跟容量进行与操作 获得元素应该在的位置 小结:之所以要进行高低16位的异或运算, 是因为 ,...原创 2023-03-15 09:33:05 · 2330 阅读 · 1 评论 -
Java位运算
目录前言1、左移( <<)2、右移(>>)3、无符号右移(>>>)4、与(&)5、或( |)6、异或(^)7、非(~) 一元操作符前言Java提供的位运算符有:左移( <<)、右移(>>) 、无符号右移(>>>) 、位与(&)、位或( |)、位非(~)、位异或(^),除了位非( ~ )是一元操作符外,其它的都是二元操作...原创 2021-04-24 18:04:04 · 7326 阅读 · 4 评论 -
hashCode
hashCode原理hashCode是jdk根据对象的地址算出来的一个int数字,即对象的哈希码值,代表了该对象在内存中的存储位置。 hashCode()方法是顶级类Object类的提供的一个方法,所有的类都可以进行对hashCode方法重写。 比较一个类是否相同时往往会重写equals方法,值得注意的是,重写equals方法的同时必须也要重写hashCode方法,多次调用一个对象的hashCode方法必须返回同一个数字,这也是必须遵守的规范。hashCode冲突概念 当两个对...原创 2021-04-24 12:17:10 · 3136 阅读 · 0 评论 -
LinkedList源码
基本原理LinkedList底层基于链表来实现,节点挂节点,并不是连续内存,节点之间连接靠指针, 所以随便插入,删除元素, 不会像ArrayList一样有元素移动, 所以特别适合元素的插入删除 LinkedList并不太适合随机读取, 因为需要从头或者从尾部进行遍历,需要目标对象双向链表结构插入元素头部插入元素, 就是将新节点的next指向原先第一个节点, 原先第一个节点的prev指向新节点, first指针指向新节点 尾部插入元素, 原先尾部的next指向新节点, 新节点的p...原创 2021-04-22 19:58:16 · 5992 阅读 · 0 评论 -
ArrayList源码
目录构造函数add()set()add(index, element)get()remove()总结构造函数空构造函数, 显而易见,构造了一个空的Object数据private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}传了容量的原创 2021-04-21 20:20:32 · 2107 阅读 · 0 评论