1. 程式人生 > >Java 集合類詳解 Java 集合類詳解

Java 集合類詳解 Java 集合類詳解

Java 集合類詳解

 

0.參考文獻

http://blog.csdn.net/liulin_good/article/details/6213815

1.java集合類圖

1.1

1.2

  上述類圖中,實線邊框的是實現類,比如ArrayList,LinkedList,HashMap等,折線邊框的是抽象類,比如AbstractCollection,AbstractList,AbstractMap等,而點線邊框的是介面,比如Collection,Iterator,List等。

  發現一個特點,上述所有的集合類,都實現了Iterator介面,這是一個用於遍歷集合中元素的介面,主要包含hashNext(),next(),remove()三種方法。它的一個子介面LinkedIterator在它的基礎上又添加了三種方法,分別是add(),previous(),hasPrevious()。也就是說如果是先Iterator介面,那麼在遍歷集合中元素的時候,只能往後遍歷,被遍歷後的元素不會在遍歷到,通常無序集合實現的都是這個介面,比如HashSet,HashMap;而那些元素有序的集合,實現的一般都是LinkedIterator介面,實現這個介面的集合可以雙向遍歷,既可以通過next()訪問下一個元素,又可以通過previous()訪問前一個元素,比如ArrayList。

  還有一個特點就是抽象類的使用。如果要自己實現一個集合類,去實現那些抽象的介面會非常麻煩,工作量很大。這個時候就可以使用抽象類,這些抽象類中給我們提供了許多現成的實現,我們只需要根據自己的需求重寫一些方法或者新增一些方法就可以實現自己需要的集合類,工作流昂大大降低。

1.3

2.詳解

 2.1HashSet

HashSet是Set介面的一個子類,主要的特點是:裡面不能存放重複元素,而且採用雜湊的儲存方法,所以沒有順序。這裡所說的沒有順序是指:元素插入的順序與輸出的順序不一致。

程式碼例項:HashSetDemo

View Code

程式碼例項:SetTest

View Code

 

2.2ArrayList

ArrayList是List的子類,它和HashSet想法,允許存放重複元素,因此有序。集合中元素被訪問的順序取決於集合的型別。如果對ArrayList進行訪問,迭代器將從索引0開始,每迭代一次,索引值加1。然而,如果訪問HashSet中的元素,每個元素將會按照某種隨機的次序出現。雖然可以確定在迭代過程中能夠遍歷到集合中的所有元素,但卻無法預知元素被訪問的次序。

程式碼例項:ArrayListDemo

View Code

2.3 ListIterator

ListIterator是一種可以在任何位置進行高效地插入和刪除操作的有序序列。

程式碼例項:LinkedListTest

View Code

 2.4HashMap

參考之前的一篇部落格:Hashmap實現原理

 

 2.5WeekHashMapDemo

View Code

輸出結果

View Code

 疑問:為什麼value沒有被回收。

 

3.比較

    是否有序 是否允許元素重複
Collection
List
Set AbstractSet
  HashSet
  TreeSet 是(用二叉排序樹)
Map AbstractMap 使用key-value來對映和儲存資料,key必須唯一,value可以重複
  HashMap
  TreeMap 是(用二叉排序樹)

 

 

作者: xwdreamer 出處: http://www.cnblogs.com/xwdreamer 歡迎任何形式的轉載,但請務必註明出處。

0.參考文獻

http://blog.csdn.net/liulin_good/article/details/6213815

1.java集合類圖

1.1

1.2

  上述類圖中,實線邊框的是實現類,比如ArrayList,LinkedList,HashMap等,折線邊框的是抽象類,比如AbstractCollection,AbstractList,AbstractMap等,而點線邊框的是介面,比如Collection,Iterator,List等。

  發現一個特點,上述所有的集合類,都實現了Iterator介面,這是一個用於遍歷集合中元素的介面,主要包含hashNext(),next(),remove()三種方法。它的一個子介面LinkedIterator在它的基礎上又添加了三種方法,分別是add(),previous(),hasPrevious()。也就是說如果是先Iterator介面,那麼在遍歷集合中元素的時候,只能往後遍歷,被遍歷後的元素不會在遍歷到,通常無序集合實現的都是這個介面,比如HashSet,HashMap;而那些元素有序的集合,實現的一般都是LinkedIterator介面,實現這個介面的集合可以雙向遍歷,既可以通過next()訪問下一個元素,又可以通過previous()訪問前一個元素,比如ArrayList。

  還有一個特點就是抽象類的使用。如果要自己實現一個集合類,去實現那些抽象的介面會非常麻煩,工作量很大。這個時候就可以使用抽象類,這些抽象類中給我們提供了許多現成的實現,我們只需要根據自己的需求重寫一些方法或者新增一些方法就可以實現自己需要的集合類,工作流昂大大降低。

1.3

2.詳解

 2.1HashSet

HashSet是Set介面的一個子類,主要的特點是:裡面不能存放重複元素,而且採用雜湊的儲存方法,所以沒有順序。這裡所說的沒有順序是指:元素插入的順序與輸出的順序不一致。

程式碼例項:HashSetDemo

View Code

程式碼例項:SetTest

View Code

 

2.2ArrayList

ArrayList是List的子類,它和HashSet想法,允許存放重複元素,因此有序。集合中元素被訪問的順序取決於集合的型別。如果對ArrayList進行訪問,迭代器將從索引0開始,每迭代一次,索引值加1。然而,如果訪問HashSet中的元素,每個元素將會按照某種隨機的次序出現。雖然可以確定在迭代過程中能夠遍歷到集合中的所有元素,但卻無法預知元素被訪問的次序。

程式碼例項:ArrayListDemo

View Code

2.3 ListIterator

ListIterator是一種可以在任何位置進行高效地插入和刪除操作的有序序列。

程式碼例項:LinkedListTest

View Code

 2.4HashMap

參考之前的一篇部落格:Hashmap實現原理

 

 2.5WeekHashMapDemo

View Code

輸出結果

View Code

 疑問:為什麼value沒有被回收。

 

3.比較

    是否有序 是否允許元素重複
Collection
List
Set AbstractSet
  HashSet
  TreeSet 是(用二叉排序樹)
Map AbstractMap 使用key-value來對映和儲存資料,key必須唯一,value可以重複
  HashMap
  TreeMap 是(用二叉排序樹)