List接口源码分析

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/#

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。