轉:Java中的HashSet, TreeSet, HashMap, TreeMap
Java中的HashSet和TreeSet
文/ Iangao
一. 問題
1. HashSet,TreeSet是如何使用hashCode()和equal()方法的
2. TreeMap,TreeSet中的物件何時以及為何要實現Comparable介面?
二. 回答:
1. HashSet是透過HashMap實現的,TreeSet是透過TreeMap實現的,只不過Set用的只是Map的key
2. Map的key和Set都有一個共同的特性就是集合的唯一性.TreeMap更是多了一個有序性.
3. hashCode和equal()是HashMap用的, 因為無需排序所以只需要關注定位和唯一性即可.
a. hashCode是用來計算hash值的,hash值是用來確定hash表索引的.
b. hash表中的一個索引處存放的是一張連結串列, 所以還要透過equal方法迴圈比較鏈上的每一個物件
才可以真正定位到鍵值對應的Entry.
c. put時,如果hash表中沒定位到,就在連結串列前加一個Entry,如果定位到了,則更換Entry中的value,並返回舊value
否則屬性變了之後hashCode會變,equal也會為false, 這樣在Map中就找不不到它了
而且這樣的物件因為找不到它所以得不到釋放,這樣就變成了一個無效引用了(相當於記憶體洩漏).
4. 由於TreeMap需要排序,所以需要一個Comparator為鍵值進行大小比較.當然也是用Comparator定位的.
a. Comparator可以在建立TreeMap時指定,這時排序時使用Comparator.compare
b. 如果建立時沒有指定Comparator,那麼就會使用key.compareTo()方法,這就要求key必須實現Comparable介面.
c. TreeMap是使用Tree資料結構實現的,所以使用compare介面就可以完成定位了.
發表於 @ 2008年11月18日 16:46:00|評論(0)|收藏
新一篇: Java String中的HashCode和equal | 舊一篇: Java同步技術(九)
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/Iangao/archive/2008/11/18/3326991.aspx
本文來自CSDN部落格,轉載請標明出處:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/220284/viewspace-1023888/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HashSet/HashMap、TreeSet/TreeMap、LinkedHashSet/LinkedHashMap 區別HashMap
- Java中HashMap,LinkedHashMap,TreeMap的區別[轉]JavaHashMap
- 三,TreeMap和HashMap,TreeSet和HashMap的區別以及方法使用上的不同HashMap
- Java Set 常用集合 HashSet、LinkedHashSet、TreeSetJava
- java基礎:HashSet/LinkedHashSet/TreeSet — 原始碼分析Java原始碼
- HashSet、TreeSet、CopyOnWriteArraySet和CopyOnWriteArrayList
- Java HashMap 和 HashSet 的高效使用技巧JavaHashMap
- Java集合(3)一 紅黑樹、TreeMap與TreeSet(上)Java
- Java集合(4)一 紅黑樹、TreeMap與TreeSet(下)Java
- HashSet和HashMapHashMap
- HashSet vs. TreeSet vs. LinkedHashSet
- 4、Set集合——HashSet、TreeSet(Comparable、Comparator)
- Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及區別Java
- HashSet與HashMap的區別HashMap
- 好程式設計師Java培訓分享treeset和hashset的區別程式設計師Java
- TreeMap和HashMap的元素比較HashMap
- List集合(ArrayList-LinkedList);Set集合(HashSet-TreeSet)
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- 集合框架-HashMap&HashSet&LinkedHshMap框架HashMap
- 二、JAVA知識點之HashMap、TreeMap、紅黑樹——精髓JavaHashMap
- Java集合詳解7:一文搞清楚HashSet,TreeSet與LinkedHashSet的異同Java
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- 【java】【集合】TreeSetJava
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap
- 淺談Java中的HashmapJavaHashMap
- HashMap,LinkedHashMap,TreeMap讀取大量資料效率的比較HashMap
- Java中HashMap的實現原理JavaHashMap
- java中的HashMap用法總結JavaHashMap
- Java集合——TreeMap(一)Java
- Java集合——TreeMap(二)Java
- [Java基礎]TreeMapJava
- Java集合系列-HashSetJava
- 橫掃Java Collections系列 —— TreeSetJava
- Java集合 HashSet的原理及常用方法Java
- Java中實現執行緒安全HashSet的幾種方法 | baeldungJava執行緒
- Java併發指南13:Java 中的 HashMap 和 ConcurrentHashMap 全解析JavaHashMap
- HashSet與HashMap比較——新增物件已存在處理方式一樣?HashMap物件
- java基礎:TreeMap — 原始碼分析Java原始碼