ArrayList扩容策略:
默认10 扩容时是base + base/2, 即10 15 22 33 49...
扩容时不安全:grow方法扩容时,赋值 elementData = Arrays.copyOf(elementData, newCapacity)时,若两个线程都进入这个地方,会导致快的赋值被慢的覆盖,导致跳号
HashMap扩容策略:
容量默认16 loadFactor默认0.75 必须大于0
容量扩容是16*2,若初始知道容量,也会resize为2的幂次大小,然后每次乘以2
loadFactor需要大于0; 0.75是空间与时间的折中,即默认16,当加入对象等于12时会触发扩容;
小于0.75 则会越早扩容,即减少hash冲突,node或链表里的数量,能有效减少遍历的时间,查询的快,但牺牲了空间,即空间换时间。
大于0.75,可以大于1,则说明hash冲突会很严重,但是空间不会浪费,查的时候会慢,时间换空间
本文深入探讨了ArrayList和HashMap的扩容策略,包括ArrayList的默认扩容比例和扩容时的线程安全问题,以及HashMap的容量、负载因子设定原理,如何在空间与时间之间做出折中选择。
129

被折叠的 条评论
为什么被折叠?



