Java容器之旅:容器基礎知識總結

來源:互聯網
上載者:User

標籤:

展示了Java容器類庫的完備圖,包括抽象類別和遺留構件(不包括Queue的實現)。

常用的容器用黑色粗線框表示,點線框表示介面,虛線框表示抽象類別,實線框表示類,空心箭頭表示實現關係。Produce表示任意的Map對象可以產生Collection對象,任意的Collection對象可以產生Iterator對象。

 

 

最後以表格的形式總結List、Set、Map介面及各實作類別的特性:

 

 

特性

實作類別

實作類別特性

對放置的元素的要求

List

線性、有序的儲存容器,可通過索引訪問元素get(n)

ArrayList

數組實現。非同步。

 

Vector

類似ArrayList,同步。

 

LinkedList

雙向鏈表。非同步。

 

Set

元素不能重複,元素必須定義equals()方法

HashSet

為快速尋找設計的Set

元素必須定義hashCode()

TreeSet

保持次序的Set,底層為樹結構

元素必須實現Comparable介面

LinkedHashSet

內部使用鏈表維護元素的順序(插入的次序)

元素必須定義hashCode()

Map

儲存索引值對成員,Map中的所有鍵必須定義equals()方法

HashMap

基於雜湊表的 Map 介面的實現,滿足通用需求

鍵必須有恰當的hashCode(),如果修改了equals方法,需同時修改hashCode方法

TreeMap

預設根據自然順序進行排序,或者根據建立映射時提供的 Comparator進行排序

鍵成員要求實現caparable介面,或者使用Comparator構造TreeMap。鍵成員一般為同一類型。

LinkedHashMap

類似於HashMap,但迭代遍曆時取得“索引值對”的順序是其插入順序或者最近最少使用的次序

與HashMap相同

IdentityHashMap

使用==取代equals()對“索引值”進行比較的散列映射

成員通過==判斷是否相等

WeakHashMap

弱鍵映射,允許釋放映射所指向的對象

 

ConcurrentHashMap

安全執行緒的Map

 

 

(1)各種Queue和Stack的行為,完全可以LinkedList提供支援,上述表格不包含Queue。

(2)但凡是和hash相關的,必然會設計到hashCode方法,因為要根據返回的雜湊碼去計算該對象在雜湊表中的位置;但凡是和Tree相關的,必然會設計到Comparable介面,因為要涉及到排序。

(3)如果要進行大量的隨機訪問,就是用ArrayList;如果要經常從表中間插入或刪除元素,則應該用LinkedList。遍曆的時候,對於ArrayList優先選擇get方式,LinkedList優先選擇iterator方式。

(4)Collection繼承了Iterable介面,故所有的Collection對象都可以使用foreach方式,對元素進行遍曆。所有的Collection對象都hiuforeach迴圈可以與任何實現了Iterable介面的對象一起工作。

Java容器之旅:容器基礎知識總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.