HashSet/HashMap、TreeSet/TreeMap、LinkedHashSet/LinkedHashMap 區別
Map 集合中儲存 Key-value 對形式的元素,訪問時只能根據每項元素的 key 來訪問其 value
Set 集合是無序集合,集合中的元素不可以重複,訪問集合中的元素只能根據元素本身來訪問(也是集合裡元素不允許重複的原因)
一、Map介面
Map 是一個對映介面,即 key-value 鍵值對。Map 中的每一個元素包含 “一個 key” 和 “key 對應的 value”。AbstractMap 是個抽象類,它實現了 Map 介面中的大部分 API。而 HashMap,TreeMap,都是繼承於 AbstractMap。
二、Map實現類
HashMap 可實現快速儲存和檢索,但其缺點是其包含的元素是無序的,這導致它在存在大量迭代的情況下表現不佳。
LinkedHashMap 保留了 HashMap 的優勢,且其包含的元素是有序的。它在有大量迭代的情況下表現更好。
TreeMap 能便捷的實現對其內部元素的各種排序,但其一般效能比前兩種 map 差。
LinkedHashMap 對映減少了 HashMap 排序中的混亂,且不會導致 TreeMap 的效能損失。
HashMap、LinkedHashMap、TreeMap三者均執行緒不安全
三、Set 介面
1.Set 不允許包含相同的元素,如果試圖把兩個相同元素加入同一個集合中,add 方法返回 false(注意,是add的返回值為false,並未報錯,只是該重複的元素並未加入其中)。
2.Set 判斷兩個物件相同不是使用 == 運算子,而是根據 equals 方法。也就是說,只要兩個物件用 equals 方法比較返回 true,Set 就不會接受這兩個物件。
四、Set的實現類
Set 的實現類有 HastSet 和 TreeSet。 HashSet 依賴於 HashMap,它實際上是通過 HashMap 實現的;TreeSet 依賴於 TreeMap,它實際上是通過 TreeMap 實現的。LinkedHashSet是HashSet的實現類。
1.HashSet:元素無序。
比如存入 a、e、c、d、b,輸出 d、e、b、c、a。
2.LinkedHashSet:怎麼存進去,怎麼出來。
比如存入 a、e、c、d、b,輸出 a、e、c、d、b。
3.TreeSet:排好序的輸出。
比如存入 a、e、c、d、b,輸出 a、b、c、d、e。
總體而言,如果你需要一個訪問快速的 Set,你應該使用 HashSet;當你需要一個排序的 Set,你應該使用 TreeSet;當你需要記錄下插入時的順序時,你應該使用 LinedHashSet。同時,比起map所有的set都是帶有去重功能的,同時三者均是非執行緒安全。
綜合考慮
有去重需求的考慮set實現類,在根據具體情況(排序——TreeSet、按存入順序——LinkedHashSet,效能——HashSet)考慮具體實現類,如果沒有去重需求,則考慮map,map的效能整體比set要好,因為set的底層實現是map。
補充:
Set<Integer> set = new TreeSet<>(Comparator.reverseOrder());
Map<String,Integer> map = new TreeMap<>(Comparator.reverseOrder());
在Tree物件宣告的時候,可以呼叫comparator類的reverseOrder方法實現倒序儲存。
相關文章
- Java中HashMap,LinkedHashMap,TreeMap的區別[轉]JavaHashMap
- Java Set 常用集合 HashSet、LinkedHashSet、TreeSetJava
- HashSet vs. TreeSet vs. LinkedHashSet
- Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及區別Java
- 三,TreeMap和HashMap,TreeSet和HashMap的區別以及方法使用上的不同HashMap
- java基礎:HashSet/LinkedHashSet/TreeSet — 原始碼分析Java原始碼
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- HashSet與HashMap的區別HashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- HashMap,LinkedHashMap,TreeMap讀取大量資料效率的比較HashMap
- HashMap與LinkedHashMap型別集合HashMap型別
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap
- Java集合詳解7:一文搞清楚HashSet,TreeSet與LinkedHashSet的異同Java
- 好程式設計師Java培訓分享treeset和hashset的區別程式設計師Java
- HashSet、TreeSet、CopyOnWriteArraySet和CopyOnWriteArrayList
- HashSet和HashMapHashMap
- 4、Set集合——HashSet、TreeSet(Comparable、Comparator)
- Java類集框架 —— HashSet、LinkedHashSet原始碼分析Java框架原始碼
- 你真的瞭解HashSet 和HashMap的區別、優缺點、使用場景嗎?HashMap
- 集合框架-HashMap&HashSet&LinkedHshMap框架HashMap
- List集合(ArrayList-LinkedList);Set集合(HashSet-TreeSet)
- Java集合(3)一 紅黑樹、TreeMap與TreeSet(上)Java
- Java集合(4)一 紅黑樹、TreeMap與TreeSet(下)Java
- TreeMap和HashMap的元素比較HashMap
- 搞懂 HashSet & LinkedHashSet 原始碼以及集合常見面試題目原始碼面試題
- Java HashMap 和 HashSet 的高效使用技巧JavaHashMap
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- 二、JAVA知識點之HashMap、TreeMap、紅黑樹——精髓JavaHashMap
- C#中Hashtable和HashMap的區別C#HashMap
- java複習之HashMap和Hashtable的區別JavaHashMap
- HashSet與HashMap比較——新增物件已存在處理方式一樣?HashMap物件
- 併發LinkedHashSet
- TreeSet
- LinkedHashMapHashMap
- 五分鐘看懂Hashtable原始碼以及與HashMap的區別原始碼HashMap