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接口)。 其內部是鏈表實現的,因此插入和刪除性能較好,迭代訪問性能較好,但是不支持隨機訪問。