List接口的實現類:ArrayList,LinkedList,Vector

1. ArrayList

ArrayList 是 List 接口的大小可變數組的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。除了實現 List 接口外,此類還提供一些方法來操作內部用來存儲列表的數組的大小。(此類大致上等同於 Vector 類,除了此類是不同步的。)

聲明:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable

// ArrayList 構造方法摘要
ArrayList()    // 構造一個初始容量爲 10 的空列表。
ArrayList(Collection<? extends E> c)    // 構造一個包含指定 collection 的元素的列表,這些元素是按照該 collection 的迭代器返回它們的順序排列的。
ArrayList(int initialCapacity)    // 構造一個具有指定初始容量的空列表。

2. LinkedList

LinkedList 是 List 接口的鏈接列表實現。實現所有可選的列表操作,並且允許所有元素(包括 null)。除了實現 List 接口外,LinkedList 類還爲在列表的開頭及結尾 get、remove 和 insert 元素提供了統一的命名方法。這些操作允許將鏈接列表用作堆棧、隊列雙端隊列

此類實現 Deque 接口,爲 add、poll 提供先進先出隊列操作,以及其他堆棧和雙端隊列操作。

所有操作都是按照雙重鏈接列表的需要執行的。在列表中編索引的操作將從開頭或結尾遍歷列表(從靠近指定索引的一端)。

定義:public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable

// LinkedList 構造方法摘要
LinkedList()    // 構造一個空列表。 
LinkedList(Collection<? extends E> c)    // 構造一個包含指定 collection 中的元素的列表,這些元素按其 collection 的迭代器返回的順序排列。 
// LinkedList 特有方法
void addFirst(E e) // 將指定元素插入此列表的開頭。 
void addLast(E e) // 將指定元素添加到此列表的結尾。

E getFirst() // 返回此列表的第一個元素。 
E getLast() // 返回此列表的最後一個元素。
// 獲取元素,但是不刪除元素

E removeFirst() // 移除並返回此列表的第一個元素。 
E removeLast() // 移除並返回此列表的最後一個元素。 
// 獲取元素,並且刪除元素

/*
    當列表中沒有元素的時候,無論是 get 還是 remove 都會報出 NoSuchElementException 異常,
    後期升級之後,在JDK1.6版本之後出現了新的方法,如果列表爲空,取不到元素,返回 null
*/
// 升級後方法
boolean offerFirst(E e) // 在此列表的開頭插入指定的元素。 
boolean offerLast(E e) // 在此列表末尾插入指定的元素。

E peekFirst() // 獲取但不移除此列表的第一個元素;如果此列表爲空,則返回 null。 
E peekLast() // 獲取但不移除此列表的最後一個元素;如果此列表爲空,則返回 null。

E pollFirst() // 獲取並移除此列表的第一個元素;如果此列表爲空,則返回 null。 
E pollLast() // 獲取並移除此列表的最後一個元素;如果此列表爲空,則返回 null。 

3. Vector

Vector 類可以實現可增長的對象數組。與數組一樣,它包含可以使用整數索引進行訪問的組件。但是,Vector 的大小可以根據需要增大或縮小,以適應創建 Vector 後進行添加或移除項的操作。

定義:public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable

從以下版本開始:JDK1.0

// Vector 構造方法摘要 
Vector() // 構造一個空向量,使其內部數據數組的大小爲 10,其標準容量增量爲零。 
Vector(Collection<? extends E> c) // 構造一個包含指定 collection 中的元素的向量,這些元素按其 collection 的迭代器返回元素的順序排列。 
Vector(int initialCapacity) // 使用指定的初始容量和等於零的容量增量構造一個空向量。 
Vector(int initialCapacity, int capacityIncrement) // 使用指定的初始容量和容量增量構造一個空的向量。 

4. 分析

Collection
    |--List:元素是有序的,元素可以重複,集合體系中包含索引。
        |--Arraylist:JDK1.2
            1. 底層的數據結構是數組數據結構
            2. 查詢速度快,但是增刪慢
            3. 線程不同步
            4. 初始長度爲 10,如果長度不夠,每次擴容一半。
        |--LinkedList:JDk1.2
            1. 底層的數據結構是鏈表結構
            2. 增刪速度快
            3. 線程不同步
        |--Vector:JDK1.0
            1. 底層的數據結構是數組數據結構
            2. 線程同步
            3. 初始長度爲 10,如果長度不夠,每次擴容一倍。
    |--Set:元素不可重複,元素無序(即存入順序與取出順序不一定相同)


結論:ArrayList 是 Vector 的替代類,ArrayList 是後需更新維護出現的精簡版本,使用起來更加方便。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章