List接口总结:
List接口是Collection接口的子接口,从其名称可以看出,是一个元素有序(并不是按大小排序,具有顺序索引,类似于数组),默认按照元素的添加顺序设置元素的索引,List和Set不同在于List可以具有重复元素,List增加了按照索引插入(add(int
index,Object element)方法),替换(set(int index,Object
element)方法)和删除集合元素(remove(int
index)方法)。List判断元素相同的标准:两个对象equals()方法比较返回true;
常见方法:其中E代表范型。
boolean add(E e) 向列表的尾部添加指定的元素
void add(int index, E element) 在列表的指定位置插入指定元素
void clear() 从列表中移除所有元素
E get(int index) 返回列表中指定位置的元素
boolean contains(Object o) 如果列表包含指定的元素,则返回 true
E set(int index, E element)用指定元素替换列表中指定位置的元素
int size()返回列表中的元素数。
E remove(int index) 移除列表中指定位置的元素
boolean isEmpty() 如果列表不包含元素
ListIterator<E> listIterator()返回此列表元素的列表迭代器。
List类的典型实现:
1.ArrayList
2.Vector
两者均封装了一个容量动态变化的的Object数组。我们无需关心两者的初始化长度,默认的初始化长度为10,当其中的元素数量大于10时,容量会自动的增加。
两者在用法上几乎完全相同。最显著的一个区别:ArrayList是线程不安全的,当有多个线程访问时,须手动实现同步;而Vector是线程安全的,所以Vector的性能较ArrayList低。不推荐使用Vector,即使是需要线程安全。
Vector还提供了Stack子类,实现了“栈”这一数据结构。因此Stack也是线程安全的,性能较差。
Queue集合(接口)是用于实现“队列”这种数据结构,特点是先进先出。
Queue的典型实现类:PriorityQueue(优先队列),PriorityQueue保存元素的顺序并不是按照入队的顺序,而是按照大小顺序,即元素按照从小到大的顺序从队头到队尾,这违反了FIFO的原则,其对元素的要求排序方法和前面文章讲述的TreeSet的要求基本一致。
Queue还有一个子接口:Deque,实现了一个双端队列。它有一个典型的实现类:ArrayDeque,是一个基于数组实现的双端队列。可以把ArrayDeque当做栈使用(双端队列当栈,很简单,一端只进不出,一端只出不进),在程序中需要使用栈时,优先使用LinkedList或ArrayDeque,而不是stack,因为性能更加出色。
LinkedList是一个很强大的功能容器,可以用作栈和双端队列(实现了Deque接口)。其内部是链表实现的,因此插入和删除性能较好,迭代访问性能较好,但是不支持随机访问。