轉: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
- HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap區別HashMap
- 三,TreeMap和HashMap,TreeSet和HashMap的區別以及方法使用上的不同HashMap
- Java Set 常用集合 HashSet、LinkedHashSet、TreeSetJava
- Java中HashMap和TreeMap的區別深入理解JavaHashMap
- Java集合框架原始碼剖析:TreeSet 和 TreeMapJava框架原始碼
- HashTable HashMap HashSet區別(java)HashMapJava
- HashSet、TreeSet、CopyOnWriteArraySet和CopyOnWriteArrayList
- Java HashMap 和 HashSet 的高效使用技巧JavaHashMap
- java基礎:HashSet/LinkedHashSet/TreeSet — 原始碼分析Java原始碼
- Java中Collection Frame中常用集合簡析(ArrayList,Vector,HashSet,TreeSet...)Java
- Java集合(5)一 HashMap與HashSetJavaHashMap
- Java集合(3)一 紅黑樹、TreeMap與TreeSet(上)Java
- Java集合(4)一 紅黑樹、TreeMap與TreeSet(下)Java
- HashSet和HashMapHashMap
- Java集合框架原始碼剖析:HashSet 和 HashMapJava框架原始碼HashMap
- Java 集合框架 HashSet 和 HashMap 原始碼剖析Java框架HashMap原始碼
- HashSet與HashMap的區別HashMap
- Java 容器和泛型(3)HashSet,TreeSet 和 LinkedHashSet比較Java泛型
- Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及區別Java
- 好程式設計師Java培訓分享treeset和hashset的區別程式設計師Java
- TreeMap和HashMap的元素比較HashMap
- HashMap、HashTable、HashSet詳解HashMap
- HashMap和HashSet深度解析HashMap
- 關於HashSet與TreeSet的區別與聯絡
- Java結合中的HashSetJava
- 二、JAVA知識點之HashMap、TreeMap、紅黑樹——精髓JavaHashMap
- 集合框架-HashMap&HashSet&LinkedHshMap框架HashMap
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- List集合(ArrayList-LinkedList);Set集合(HashSet-TreeSet)
- java基礎學習之十:集合型別Set/List/Map(TreeSet,LinkedList,TreeMap)Java型別
- java中hashMap的排序JavaHashMap排序
- Java集合詳解7:一文搞清楚HashSet,TreeSet與LinkedHashSet的異同Java
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- Java中對HashMap的深度分析與比較(轉)JavaHashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- 淺談Java中的HashmapJavaHashMap