‘
ArrayList底层原理:动态扩容:源码熟悉
1、无参构造方法,懒加载,没有初始化数组
2、有参构造方法,初始化指定长度数组
3、通过add方法实现的初始化和数组动态扩容(通过copy实现扩容)
4、通过remove方法实现的数据内容的copy复制减元素
5、动态扩容,是扩容原数组的一半;然后将原数组内容copy到新数组
vector所有操作和arraylist都一样,不同点是所有的写操作都加入了synchronize,即都是线程安全的,消耗性能,所以被抛弃了;
那如何在多线程下保证集合数据的安全呢:
一种方式是在业务代码中使用锁机制保证数据安全;
二是使用Collections工具类Collections.synchronizeList(list)将集合变成同步的;本质给list集合方法加上了synchronize代码块,从而达到代码块的同步操作;(还可以转换set和map)
这种方式的好处就是,不用处处添加同步,只需要在有数据安全的地方使用集合工具类Collections将集合转化成线程安全的就可以。
FailFast:为了应对并发场景风险->集合迭代过程中modCount使用抛出异常
LinkedList集合:
put方法,头插法,linkedList
add方法,尾插法,list接口中的方法
get方法,获取指定位置元素,list接口中方法(本质还是遍历琏表,遍历优化 )
set方法,设置指定位置元素,list接口中方法