Java集合List特点及使用场景分析

Collection

  • List
  • Set
  • AbstractCollection
  • Queue

Java集合List特点及使用场景分析

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)