一大波Java來襲(八)——Java集合之List接口

本文主要講Collection接口之一List接口及其實現類。

          List集合,特點:有序,可重複


與上文中Set不同的是,List集合是有序的,這種順序表現在:通過索引的形式,記錄了元素的添加順序。

List接口的實現類,如圖所示:

1. ArrayList 與數組有關嗎?          

2.Vector

3.LinkedList

          上文研究Set集合的時候,瞭解到LinkedHashSet是通過鏈表的形式將hash算法存儲的元素鏈接起來,這裏是不是將:帶有索引的List集合也通過鏈表的形式,連接起來呢?

          從圖中看出,實現了deque接口,猜測應該會實現雙向隊列的效果把。


待我慢慢道來.......

一、List接口和ListIterator接口

List接口的特點在於通過“索引”記錄了元素的添加順序。因此相比較起父接口Collection而言,添加了一些根據索引操作集合元素的方法。

額外添加了專門操作List的方法:listIterator()

listIterator與Iterator對比listIterator增加了向前迭代的功能(Iterator只能向後迭代),增加了通過add方法向List集合中添加元素(Iterator只能刪除元素)

public class TestlistIterator {

	public static void main(String[] args) {
		String[] books = {"englishbook","computerbook","musicbook"};
		List bookList = new ArrayList();
		for (int i = 0; i < books.length; i++) {
			bookList.add(books[i]);
		}
		ListIterator bookListIterator = bookList.listIterator();
		while(bookListIterator.hasNext()){
			System.out.println("book正向迭代:"+bookListIterator.next());
			bookListIterator.add("---------分隔符--------------");
		}
		System.out.println("-------下面開始反向迭代----------------");
		while(bookListIterator.hasPrevious()){
			System.out.println("book反向迭代:"+bookListIterator.previous());
		}
	}

}

結果如下:


二、ArrayList和Vector實現類

1. 相同點:

          都是基於數組實現的List類,所以封裝了一個動態再分配的Object[]數組。通過屬性capacity表示長度,且會自動增長。

         若添加大量元素,可使用ensureCapacity一次性添加capacity。甚至是直接指定capacity的大小,從而減少重新分配的次數,提高性能。

2. 不同點:

         簡單理解爲新的ArrayList替代舊的Vector的功能。

         ArrayList是線程不安全,Vector線程安全(性能較高,但不建議使用)

         Stack是Vector的子類,模擬“棧”數據結構,LIFO。

LinkedList基於鏈表實現List類,優化順序訪問,特別是:插入、刪除,速度非常快。(同時實現Deque接口,雙向隊列)

三、固定長度的List

         操作數據的工具類Arrays.asList(.....)將數組轉化爲List集合【此時爲Arrays內部類ArrayList的實例

         注意:此時長度已經固定了!不可改變

四、性能排名榜

各容器性能對比,主要取決於集合的底層實現,是:數組/鏈表

插入、刪除、迭代時:數組 < 鏈表。

隨機訪問:數組 > 鏈表。(數組,連續內存區)

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