List集合有序、元素可重覆。以元素的添加順序作為集合的排列順序,用下標索引集合中的元素。 List因為使用下標索引元素,所以元素可重覆。Set使用元素本身來索引,所以元素不能重覆。 List的繼承關係: List繼承了Collection的所有方法,也有自身的一些方法(下標操作): void ad ...
List集合有序、元素可重覆。以元素的添加順序作為集合的排列順序,用下標索引集合中的元素。
List因為使用下標索引元素,所以元素可重覆。Set使用元素本身來索引,所以元素不能重覆。
List的繼承關係:
List繼承了Collection的所有方法,也有自身的一些方法(下標操作):
void add(int index,Object element) 在指定處插入一個元素
boolean addAll(int index,Collection c) 在指定處插入c的所有元素
Object get(int index) 獲取指定位置處的元素
int indexOf(Object obj) 返回該對象在集合中第一次出現的位置
int lastIndexOf(Object obj) 最後一次出現的位置
Object remove(int index) 刪除並返回指定位置的元素
Object set(int index,Object obj) 替換/設置指定位置的元素,並返回舊的元素
List subList(int start,int end) 返回子List
ListIterator listIterator() 返回List集合專用的迭代器
Java8新增了sort()、replaceAll()2個方法,可以自定義排序規則、匹配模板。
List介面常用的實現類:
1、ArrayList、Vector。
ArrayList、Vector都是基於數組實現的List介面,內部都封裝了一個動態的、長度可變的數組。
向ArrayList、Vector集合中添加元素,如果數組長度不夠,會自動調用 ensureCapacity() 重新設置數組長度,一般不用我們操心。
如果要向ArrayList、Vector添加大量元素,可以手動調用 ensureCapacity() 一次性增大數組長度,這樣可以減少重新分配的次數,提高性能。
ensureCapacity(int minCapacity) //參數是數組的最小元素個數
Vector有一個子類Stack,用於模擬棧這種數據結構。
ArrayList不是線程安全的,當多個線程同時訪問、修改ArrayList集合時,需要手動同步該集合。
Vector是線程安全的,但這意味著Vector有更大的開銷,所以性能低於ArrayList。
儘管Vector是線程安全的,但Vector的缺點太多了,儘量不要使用Vector。
2、LinkedList
LinkedList不僅實現了List介面,還實現了Queue介面的子介面Deque。Queue介面用於模擬隊列這種數據結構。
LinkedList是基於鏈表實現List介面的,內部維護了一個鏈表,來實現有序。
性能分析:
Queue集合、List集合是Java中的線性表結構。Queue很少使用。
ArrayList、Vector是基於數組的,LinkedList是基於鏈表的。
Vector既要維護一個數組,又要保證線程安全,開銷較大,性能最差,一般不用。
ArrayList基於數組,查找元素較快,適合多查找的操作,但插入、刪除需要移動大量數組元素。
LinkedList基於鏈表,適合經常插入、刪除的操作,但查找效率不高。