Arraylist源码分析
Arraylist集合底层使用动态数组实现,随机查询效率非常快,插入和删除需要移动整个数组、效率低,ArrayList不是线程安全的、 Vector是线程安全的集合。
Vector 源码分析:
1.默认构造函数中对数组的扩容为长度是为10;(如果创建了集合,没有使用的话是比较占用内存的);
2.Vector集合实现add方法的时候有synchronized关键字修饰;
3.Vector集合默认数组扩容是增长一倍,可以自己指定扩容倍数 (使用构造函数传递)
特点:线程安全,并发的时候读非常慢
Arraylist与Vector集合区别
相同点:
都是实现与List接口、底层采用数组实现
不同点:
Arraylist线程不安全、Vector线程是安全集合
Arraylist底层扩容是原数组的50%,Vector集合是原数组的100%
Arraylist底层数组没有默认长度为0,Vector底层数组默认长度为10
Vector集合中可以使用capacityIncrement增长容量
CopyOnWriteArrayList
实现了List接口
内部持有一个ReentrantLock lock = new ReentrantLock();
底层是用volatile transient声明的数组 array
读写分离,写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array
特点:线程安全,写很慢,适合读多写少的场景
Fail-Fast机制原理
Fail-Fast是我们Java集合框架为了解决集合中结构发生改变的时候,快速失败的机制。
image.png
本文参考蚂蚁课堂:http://www.mayikt.com/#
网友评论