1. 程式人生 > >Thinking in java自讀筆記:HashMap,TreeMap和Hashtable

Thinking in java自讀筆記:HashMap,TreeMap和Hashtable

HashMap於HashTable的異同:
相同點:HashMap和Hashtabel的儲存元素都是鍵值對,實現原理都是雜湊表。
主要不同點:
1.繼承父類不同,Hashtable繼承與Dictionary(已廢棄),HashMap繼承於AbstractMap
2.Hashtable是執行緒安全的,HashMap是非執行緒安全的,不過如今即便使用多執行緒也不推薦使用Hashtable,可以使用ConcurrentHashMap來代替。
3.Hashtable的初始大小為11,每次擴容的大小為2*n+1,HashMap的初始大小為16,每次擴容的大小為2的冪次方。
4.計算hash值方式不同,Hashtable直接處理hashCode()的值進行模運算,HashMap通過移位運算,因為移位運算比模運算效率高,因此HashMap在訪問效率上比Hashtabel好。
Hashtable計算雜湊值方式:
這裡寫圖片描述


HashMap計算雜湊值方式:
這裡寫圖片描述

這裡寫圖片描述
5.Hashtable在put時,鍵值都不能為null,HashMap的鍵值都可以為null。

HashMap於TreeMap的異同
相同點:HashMap於TreeMap都繼承於AbstractMap,儲存元素都是鍵值對
不同點:
1.HashMap的實現原理是雜湊表,TreeMap的實現原理是紅黑樹,HashMap在初始化時可以優化(設定一個理想的初始容量大小),TreeMap不能。
2.HashMap的key值比較是通過equals()和hashCode()來確定的,TreeMap是通過compare()比較器或者compareTo()方法來比較的。
3.HashMap不能保證元素順序,TreeMap實現了SortedMap介面,因此保證了元素的順序。
4.HashMap的刪除,刪除,查詢幾乎沒有效能損耗,TreeMap的插入與刪除效能損耗大,因為要保證紅黑樹的平衡性,需要多次旋轉等操作,查詢也因為樹形結構的侷限性沒有雜湊錶快。