ArrayLsit
容量
-
add()
1.初始容量为0
2.第一次扩容变成10
3.后续扩容是上次的1.5倍(实际算法是右移再+原始)所以第二次扩容就会变成 15 >> 1 = 7, 15 + 7 =22
-
addAll()
1.下次扩容容量与元素个数之间选一个最大值去扩容
-
ArrayList(x)
1.ArrayList(int num) 使用指定的数作为容量
2.ArrayList(Collection <? extends E> c) 会使用c的大小作为容量
迭代器
fail-fast
ArrayList是这种,遍历过程中发现有人修改,就立刻抛异常
-
实现:
记录循环开始时的修改次数,通过比较次数来
fail-safe
copyOnWriteArrayList是这种,遍历过程中发现有人修改,牺牲一致性去继续遍历,遍历只会拿他开始执行时的数据
-
实现:
初始化时,保存最开始的那些数组,读写分离