Java集合

  1. ArrayList扩容机制
    默认构造函数的初始容量为10,为空数组。当执行add方法时,先执行ensureCapacityInternal(size + 1)得到minCapcity,(当 要 add 进第 1 个元素时,minCapacity 为 1,在 Math.max()方法比较后,minCapacity 为 10。), 然后执行ensureExplicitCapacity(int minCapacity),minCapacity - elementData.length > 0成立,会进入 grow(minCapacity) 方法,先计算一个新容量newCapacity = oldCapacity + (oldCapacity >> 1),所以 ArrayList 每次扩容之后容量都会变为原来的 1.5 倍左右。 如果新容量大于MAX_ARRAY_SIZE,进入(执行) hugeCapacity() 方法来比较 minCapacity 和 MAX_ARRAY_SIZE,如果 minCapacity 大于最大容量,则新容量则为Integer.MAX_VALUE,否则,新容量大小则为 MAX_ARRAY_SIZE 即为 Integer.MAX_VALUE - 8。最后调用Arrays.copyOf(elementData, newCapacity)。得到新数组。
  2. LinkedList相关:
    LinkedList是一个实现了List和Deque的双端链表,内部有一个私有类Node,这个类有三个属性,分别是前驱节点(prev),本节点的值(item),后继结点(next)。 add(E e)方法通过linkLast(E e)将元素添加到链表尾部,add(int index,E e)在指定位置添加元素,先检查index是否合法,如果index==size调用linkLast,否则调用linkBefore(e, node(index))。
    addAll(Collection c ):将集合插入到链表尾部。addAll(int index, Collection c) 将集合从指定位置开始插入,通常包括下面四个步骤:
    ①检查index范围是否在size之内
    ②toArray()方法把集合的数据存到对象数组中
    ③得到插入位置的前驱和后继节点
    ④遍历数据,将数据插入到指定位置
    addFirst(E e): 通过linkFirst(E e)将元素添加到链表头部
    addLast(E e): 将元素添加到链表尾部,与 add(E e) 方法一样
    removeLast()在链表为空时将抛出NoSuchElementException,而pollLast()方法返回null。
  3. HashMap
    容量,扩容
    https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453141153&idx=2&sn=f9a5a2a58a8b1d078ab9a2da2c9908bc&scene=21#wechat_redirect
    常见问题
    https://mp.weixin.qq.com/s/ef4oF2Wj8QYfCyxDnFSPMA
    https://mp.weixin.qq.com/s/oRx-8XXbgage9Hf97WrDQQ
    https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453141093&idx=2&sn=2784802c46f56c1fa1a1053c2c52ece0&scene=21#wechat_redirect
    1.7线程不安全:环形链表,更新覆盖
    https://mp.weixin.qq.com/s/k-4UhVJkuDeYSc1iSEMXyA
    右移高16位:
    当数组的长度很短时,只有低位数的hashcode值能参与运算。而让高16位参与运算可以更好的均匀散列,减少碰撞,进一步降低hash冲突的几率。并且使得高16位和低16位的信息都被保留了。而在这里采用异或运算而不采用& ,| 运算的原因是 异或运算能更好的保留各部分的特征,如果采用&运算计算出来的值的二进制会向1靠拢,采用|运算计算出来的值的二进制会向0靠拢
    https://blog.csdn.net/weixin_43842753/article/details/105927912
  4. CurrentHashMap
    https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453141162&idx=1&sn=72976d5ae28ca6e7cdeaef407d3fe2ca&scene=21#wechat_redirect
    https://mp.weixin.qq.com/s/veeef00M6D7JLrmFcCWCUA
    https://snailclimb.gitee.io/javaguide/#/docs/java/collection/ConcurrentHashMap%E6%BA%90%E7%A0%81+%E5%BA%95%E5%B1%82%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%88%86%E6%9E%90
    源码
    https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453141985&idx=2&sn=875412f607c18fa6ba6aa0b0862b7fe6&scene=21#wechat_redirect
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容