1. 簡介
JDK1.2 引入了 Java 集合框架,包含一組數據結構。與數組不一樣,這些數據結構的存儲空間會隨着元素添加動態增長。其中,一些支持添加劇復元素另外一些不支持,一些支持 null,一些能自動升序打印元素。html
全部這些數據結構在 java.util 包裏,包含了 Collection、List、Set、Map、SortedMap 接口。這些接口的實現類有 LinkedList、TreeSet、ArrayList、HashMap 等。除了這些數據結構,java.util 包還提供了 Date、GregorianCalender、StringTokenizer、Random 這樣的工具類。java
2. 分類
能夠按照接口、實現、算法三個方面對集合框架中的數據結構進行分類:程序員
接口:Collection、List、Map 組成了集合框架中全部具體實現類的接口,它們定義了子類必須實現的方法,很是好記。好比向集合添加元素,會用到 Collection 中定義的 add() 方法算法
實現:全部實現了上述3個接口的類,都被稱做集合框架,實際上就是數據結構。好比 LinkedList、TreeSet 等編程
算法:集合框架提供了不少能夠直接調用的算法,好比求最大最小值、排序、填充等數組
3. 優缺點
有如下4個優勢安全
減小工做量的同時增長了軟件的可用性:不須要每一個程序員動手實現排序、查找、找出元素在數據結構中出現的次數微信
執行速度更快更持久:集合框架的底層數據結構分爲兩類,基於節點的和基於數組的,前者在頻繁添加時效率更高,後者在頻繁讀取時速度更快。一些數據結構是 synchronized 線程安全的,但會影響速度有,另外一些則不是線程安全的。程序員在選用數據結構前要清楚地瞭解這些因素數據結構
互操做與轉換:因爲實現了 Collection 接口,數據結構之間是能夠相互轉換的。能夠 clone,能夠把現有的結構轉成 synchronized 版本,還能夠在把基於鏈表的數據結構轉爲基於數組的結構框架
有如下2個缺點
小心類型轉換:在集合框架類之間進行轉換時要大大地當心,尤爲要考慮泛型類型的兼容性
運行時類型檢查:集合框架在運行時會拋出異常,須要編程時多加註意
4. 繼承體系
java.util 中的數據結構繼承體系分爲兩大類,一類實現了 Collection 接口,一類實現了 Map 接口。
Collection 繼承體系(圖片來自Wikipedia)
Map 繼承體系(圖片來自Wikipedia)
集合框架核心接口及實現類:
Collection:根接口,大部分數據結構都實現了 Collection 接口中的方法
Set:實現 Set 接口的數據結構不容許重複的元素,例如 HashSet、LinkedHashSet
SortedSet:實現 SortedSet 接口的數據結構默承認按升序打印元素,例如 TreeSet
List:實現 List 接口的數據結構容許重複元素,可經過 index 訪問元素,例如 LinkedList、ArrayList、Vector
Map:實現 Map 接口的數據結構存儲鍵值對,不容許重複的 key,例如 HashMap、LinkedHashMap、Hashtable
SortedMap:繼承了 Map 接口,存儲鍵值對,不容許重複的 key,默承認按 key 升序打印元素,例如 TreeMap
SortedSet 與 SortedMap 默認的排序是天然序,可經過 Comparator 或 Comparable 接口實現自定義排序。
在接口與具體的實現類之間還有一些抽象類,以下圖:
這些抽象類爲集合增長了不少功能:
HashSet:實現 Set 接口,不容許重複的元素,底層數據結構 hash table
LinkedHashSet:實現 Set 接口,不容許重複的元素,底層數據結構 hash table 與雙鏈表
TreeSet:實現 NavigableSet 接口,不容許重複的元素,底層數據結構紅黑樹
ArrayList:實現 List 接口,容許重複元素,底層數據結構可變數組
LinkedList:實現 List 接口,容許重複元素,底層數據結構雙鏈表
Vector:實現 List 接口,容許重複元素,底層數據結構可變數組
HashMap:實現 Map 接口,不容許重複的 key,底層數據結構 hash table
LinkedHashMap:實現 Map 接口,不容許重複的 key,底層數據結構 hash table 與雙鏈表
HashTable:實現 Map 接口,不容許重複的 key,底層數據結構 hash table
TreeMap:實現 SortedMap 接口,不容許重複的 key,底層數據結構紅黑樹
原文連接: way2java 翻譯: ImportNew.com - 唐尤華 譯文連接: http://www.importnew.com/31223.html
掃描二維碼關注公衆號 回覆 「SpringBoot」 獲取價值3999的學習資料
長按識別二維碼,瞭解更多
掃描二維碼加入技術交流羣!
本文分享自微信公衆號 - 亂敲代碼(lqcoder)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。