Hashtable、HashMap、TreeMap 三個類均實現Map接口。安全
Hashtable、HashMap、TreeMap 三個類均存儲Key、Val鍵值對。鍵不可重複,且鍵只能對應一個Val信息。多線程
HashTable
對應存儲(Key、Val)不容許爲空。以下圖所示:
函數
HashMap
對應存儲(Key、Val)容許爲空,Key有且只能有一個null,Val不限定null的數量。當key重複後,後面存儲的鍵值對就會替換以前的鍵值對。以下圖所示:
spa
TreeMap
對應存儲(Key、Val)時,Key不容許爲空。以下圖所示:
線程
HashTable 、HashMap
對應存儲的(Key、Val)是無序存儲。以下圖所示:
對象
TreeMap
對應存儲的(Key、Val)是有序存儲,由於TreeMap實現SortedMap接口,默認爲生序排序,且內部實現排序爲紅黑樹排序。(紅黑樹排序爲樹中任何一個節點均比左子樹中全部節點都大於或等於,均比右子樹中全部節點都小於或等於)。以下圖所示:
排序
HashTable
初始化時,若沒有指定大小,默認存儲空間爲11。(JDK源代碼)以下圖所示:
接口
HashMap
初始化時,若沒有指定大小,默認存儲空間爲16。(JDK源代碼)以下圖所示:
get
HashTable
HashTable類中函數均爲同步函數,在函數前增長(synchronized關鍵字),所以保證了線程安全性。可是在多線程下,處理效率表現低下。當一個線程進行put操做時,其餘線程就算是get操做,也須要等待鎖釋放後才能夠進行操做。(不推薦在程序中使用)同步
HashMap HashMap類中函數均爲非同步函數,在同一時刻能夠由多個線程同時進行寫操做,所以不能保證了線程安全性。若是須要同步,推薦使用ConcurrentHashMap,此類中函數支持同步。與HashTable區別在於,HashTable鎖是對象級別,而ConcurrentHashMap是分段鎖,當一個線程進行寫操做時,其餘線程能夠讀取其餘段上數據信息。ConcurrentHashMap不只保證了多線程的安全性,並且從效率上也有很明顯的提高。(推薦在程序中使用)