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,底層數據結構紅黑樹
最後針對於互聯網公司java程序員涉及到的絕大部分難題我作成了文檔和架構視頻資料免費分享給你們(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術資料),但願能幫助到且找到一個好的工做,也節省你們在網上搜索資料的時間來學習,也能夠關注我一下之後會有更多幹貨分享。 資料領取方式:Java高級架構;603619042
