文章出處

0.參考文獻

 

此圖中藍色為抽象類、深紅色表示接口(Arrays除外)、綠色表示具體容器類

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.3LinkedList

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

代碼實例: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 是(用二叉排序樹)

 原文:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526822.html


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()