简单记录一些ArrayList和Vector和CopyOnWriteArrayList的区别
1、两个都是基于一个Object的数组来实现的,初始化默认值都是10,CopyOnWriteArrayList默认长度为0。
2、最大的区别就是ArrayList是线程不安全的而Vector是线程安全的,同事CopyOnWriteArrayList是兼顾了并发的线程安全的。
3、Vector扩容每次要么扩容2倍、要么扩容(扩容因子)的数量,ArrayList则扩容1.5倍。
4、ArrayList的数组加上了transient参数自定义了序列化的方式加快了序列化传输数据的高效率。
5、CopyOnWriteArrayList每次删除数据或者插入数据会加锁并且对当前数组的快照进行删除或者插入,最后赋值给当前数组(数组设置为了volatile保证了数组引用修改的可见性)。
6、由于CopyOnWriteArrayList的写时复制原则同时volatile的数组,所以读是可以不用加锁的,并且如果在迭代器迭代读数据的时候删除了某个数据也不会报错,适用于读多写少的环境。写时复制所以CopyOnWriteArrayList是弱一致性的哦,数组为volatile不保证数组中的元素数据改了之后的可见性。
浙公网安备 33010602011771号