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中一樣不再贅述。