Java中常用集合的關系和資料結構的不同(UML類圖詳細展示)
- 寫在前面,List 和 Map 和 Arrays是完全沒有關系的
- 一、Collection下所有常用的集合類圖展示
- 1.1、UML類圖展示
- 1.2、差別
- 1.3、API差別
- 二、Map 下所有常用的集合類圖展示
- 2.1、差別
- 2.2、API差別
寫在前面,List 和 Map 和 Arrays是完全沒有關系的
一、Collection下所有常用的集合類圖展示
1.1、UML類圖展示
1.2、差別
- List,有序,可重複,可以疊代也可以直接根據下标擷取元素。Set無序,不可重複,,隻能用疊代擷取元素。不能直接周遊集合擷取
-
ArrayList ,基于數組實作的非線程安全的集合。查詢元素快,插入,删除中間元素慢。
初始容量 10 ,擴容機制 L *3/2+1
- LinkedList ,基于連結清單實作的非線程安全的集合。查詢元素慢,插入,删除中間元素快。
- Vector,提供了随機通路功能,在Vector中,我們即可以通過元素的序号快速擷取元素對象,線程安全的。
- HashSet,使用HASH算法來存儲集合中的元素,是以具有良好的存取和查找性能。當向HashSet集合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然後根據該HashCode值決定該對象在HashSet中的存儲位置。值得主要的是,HashSet集合判斷兩個元素相等的标準是兩個對象通過equals()方法比較相等,并且兩個對象的hashCode()方法的傳回值相等。
- SortedSet:此接口主要用于排序操作,即實作此接口的子類都屬于排序的子類
- TreeSet:TreeSet是SortedSet接口的實作類,TreeSet可以確定集合元素處于排序狀态。
1.3、API差別
List下的幾個類,大緻相同
HashSet API
treeSet API
EnumSet,不常用,下次抽時間學習一下
二、Map 下所有常用的集合類圖展示
2.1、差別
- HashMap使用位桶和連結清單實作(最近的jdk1.8改用紅黑樹存儲而非連結清單),它是線程不安全的Map,方法上都沒有synchronize關鍵字修飾,但實作效率較快。
- hashTable是線程安全的一個map實作類,它實作線程安全的方法是在各個方法上添加了synchronize關鍵字。但實作效率較慢。
- ConcurrentHashMap,這個map實作類是在jdk1.5中加入的,其在jdk1.6/1.7中的主要實作原理是segment段鎖,它不再使用和HashTable一樣的synchronize一樣的關鍵字對整個方法進行枷鎖,而是轉而利用segment段落鎖來對其進行加鎖,以保證Map的多線程安全。
- WeakHashMap,和HashMap一樣,也是一個散清單,它存儲的内容也是鍵值對(key-value)映射,而且鍵和值都可以是null,不過WeakHashMap的鍵是“弱鍵”。在 WeakHashMap 中,當某個鍵不再正常使用時,會被從WeakHashMap中被自動移除。更精确地說,對于一個給定的鍵,其映射的存在并不阻止垃圾回收器對該鍵的丢棄,這就使該鍵成為可終止的,被終止,然後被回收。某個鍵被終止時,它對應的鍵值對也就從映射中有效地移除了。
- TreeMap,基于紅黑樹算法實作,與HashMap相比,它是一個能比較元素大小的Map集合,會對傳入的key進行了大小排序。其中,可以使用元素的自然順序,也可以使用集合中自定義的比較器來進行排序;不同于HashMap的哈希映射,TreeMap底層實作了樹形結構,至于具體形态,你可以簡單的了解為一顆倒過來的樹—根在上–葉在下。如果用計算機術語來說的話,TreeMap實作了紅黑樹的結構,形成了一顆二叉樹。
2.2、API差別
HashMap API
hashTable,線程安全的 HashMap,API基本和HashMap一樣
ConcurrentHashMap API
ConcurrentMap(接口) API,線程安全和原子性操作
LinkedHashMap API,無序的HashMap
WeakHashMap API