Java集合List特点及使用场景分析
Collection
- List
- Set
- AbstractCollection
- Queue
AbstractCollection
public abstract Iterator<E> iterator();
public abstract int size();
这个类实现了Collection接口,并实现了一部分方法,使得在子类中不需要重复实现
该类实现的add() 添加一个元素会抛异常UnsupportedOperationException()
详细博文
https://blog.****.net/u011240877/article/details/52829912
继承关系:
ArrayList extends AbstractList
ArrayList:动态数组
1.在JDK1.8中,有三个构造器
ArrayList(int initialCapacity),创建大小为initialCapacity的List
ArrayList(),创建一个空的List,在第一次add时创建大小为10的List
ArrayList(Collection<? extends E> c),创建一个指定元素的List
2.增删时会调用System.copyOf,效率很低
3.modCount参数,fail-fast机制,防止遍历时并发修改
继承关系:
Vector extends AbstractList
Vector:线程安全的动态数组
1:capacityIncrement扩容系数,若不指定扩容时增加一倍,否则为系数值
2:增删方法都是同步的
继承关系:
AbstractSequentialList extends AbstractList
LinkedList extends AbstractSequentialList
LinkdedList:双向链表,可当队列,栈,堆使用
1.三个属性:size,头节点Node<E> first,尾节点Node<E> last
2.默认构造函数为空,即size为0,头尾为空
(01) List 是一个接口,它继承于Collection的接口。它代表着有序的队列。
(02) AbstractList 是一个抽象类,它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。
(03) AbstractSequentialList 是一个抽象类,它继承于AbstractList。AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”。
特点:
ArrayList 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。
LinkedList 是一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作,随机访问效率低,但随机插入、随机删除效率低。
Vector是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但是ArrayList是非线程安全的,而Vector是线程安全的。
使用场景:
1.对于需要快速插入,删除元素,应该使用LinkedList
2.对于需要快速随机访问元素,应该使用ArrayList
3.对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector)