1. 程式人生 > >JavaSE_集合_LinkedList、ArrayList類

JavaSE_集合_LinkedList、ArrayList類

List集合中的物件按照一定的順序排放,裡面的內容可以重複。

實現List介面的類有

LinkedList(連結串列)、 ArrayList(動態陣列)、Vector(動態陣列)、Stack(堆疊)

一、LinkedList類(連結串列)

在上一個篇幅中已經提到LinkedList類是實現了Collection介面,所以它可使用所有Collection介面中宣告的方法。

LinkedList類的資料結構是雙向連結串列結構。它的每個結點不僅包含了值,還包括對上一個及下一個結點的引用,所以在進行資料的刪除和插入時是高效的,但是在查詢上是低效率的,這也是連結串列資料結構的普遍特點。

在程式需要採用整數索引訪問元素時我們一般不用LinkedList類,因為其效率低下,但是即便如此Java還是提供了一個用來訪問某個特定元素的get()方法。get()方法每次查詢一個元素時都要從列表的頭部開始重新搜素,如果索引大於size()/2時就從列表的尾部開始搜尋。如果需要對集合進行隨機訪問就使用陣列或者ArrayList。

java.util.List<E>

1)    ListIterator<E> listIterator(); 返回一個列表的迭代器,以便訪問列表中的元素。

2)    ListIterator<E> listIterator(int index); 返回一個列表的迭代器,以便訪問列表中的元素,這個元素是第一次呼叫next返回的給定索引的元素。

3)    void add(int i, E element); 在給定位置新增一個元素。

4)    void addAll(int i, Collection<? extends E> elements);將某個列表的所有元素新增到此列表的指定位置。

5)    E remove(int i); 刪除給定位置的元素並且返回這個元素。

6)    E get(itn i); 獲取給定位置的元素。(資料結構比較複雜時不推薦使用)

7)    E set(int i, E element); 用新元素取代指定位置的元素,返回原來那個元素。

8)    int indexOf(Object element); 返回與指定元素相等的元素在列表中第一次出現的位置,如果沒有這樣的元素返回-1。

9)    int lastIndexOf(Object element); 返回與指定元素相等的元素在列表最後一次出現的位置,如果沒有這樣的元素返回-1。

java.util.ListIterator<E>

1)    void add(E newElement); 在當前位置新增一個新元素。

2)    void set(E newElement); 用新元素取代next或者previous上次訪問的元素。如果在next或previous上次呼叫之後列表的結構被修改了,將丟擲一個IllegalStateException異常。

3)    boolean hasPrevious(); 當反向迭代列表時,還有可供訪問的元素返回true。

4)    E previous(); 返回前一個物件,如果已經到達了列表頭部丟擲NoSuchElementException異常。

5)    int nextIndex(); 返回下一次呼叫next方法時將返回元素的索引。

6)    int previousIndex(); 返回下一個呼叫previous方法時將返回元素的索引。

java.util.LinkedList<E>

1)    LinkedList(); 構造一個空連結串列。

2)    LinkedList(Collection<? extends E> elements); 構造一個連結串列,請將集合中所有元素新增到這個連結串列中。

3)    void addFirst(E element);

       void addLast(E element);

       將某個元素新增到列表的頭部或者尾部。

4)    E getFirst();

       E getLast();

       獲取列表頭部或者尾部的元素。

5)    E removeFirst();

       E removeLast();

       刪除並返回列表頭部或者尾部的元素。   

二、ArrayList(陣列列表)

陣列列表的優點就支援快速隨機訪問,但它的刪除和新增效能效率低下,且下標越小時耗時越長,因為它要移動的元素越多。所以如果我們要經常對資料列表進行隨進訪問時推薦使用ArrayList而非LinkedList。

ArrayList實現了Collection介面的方法。

從類java.util.AbstractList繼承的方法:equals、hashCode、iterator、listIterator。

從類java.util.AbstractCollection繼承的方法:containsAll、removeAll、retainAll、toString。

具體用法和LinkedList中一樣不再贅述。