![](/img/trans.png)
[英]What's the difference between the return of hashCode() and a key in a hashTable?
[英]What's the difference between Hashtable and Dictionary?
Dictionary
和Hashtable
之間的區別是什么?我如何使用Java中的Dictionary
類?
Dictionary
是Hashtable
的抽象基類。 為了向后兼容舊代碼,兩者仍然在JDK中。 我們期望使用HashMap
和Java 1.2中引入的Map
接口的其他實現。
Dictionary
是一個抽象類, Hashtable
超類。 你不應該使用Dictionary
因為它已經過時了 。 至於Hashtable,它比HashMap
等其他地圖的優勢是線程安全,但是自Java 1.5以來引入了ConcurrentHashMap,沒有真正的理由再使用它了 - 請參閱javadoc
從Java 2平台v1.2開始,這個類被改進以實現Map接口,使其成為Java Collections Framework的成員。 與新的集合實現不同,Hashtable是同步的。 如果不需要線程安全實現,建議使用HashMap代替Hashtable。 如果需要線程安全的高度並發實現,那么建議使用ConcurrentHashMap代替Hashtable。
總結 :除非出於兼容性原因,否則不要使用Dictionary
或Hashtable
,如果不需要線程安全,則使用HashMap
如果在並發環境中使用地圖,則使用ConcurrentHashMap
。
Hashtable
是Dictionary
一個實現。 您不能直接使用Dictionary
,因為它是一個抽象類。
但是你不應該使用它們,因為它們已被Map
接口和實現類取代,其中HashMap
是最受歡迎的。
我找到了一個關於OOP原理的講座,其中包含您尋求的答案:
編輯:
字典計算中的一個主要主題是存儲/檢索/刪除的主題:將數據存儲在某處,以便以后可以在不再需要時檢索和丟棄,所有這些都以最有效的方式完成。 這些計算活動的抽象體現在所謂的字典的概念中,在Java中表示為如下的接口。
散列表散列表是普通數組的泛化。 當實際存儲的密鑰數量相對於可能密鑰的總數較小時,散列表成為直接尋址數組的有效替代,因為散列表通常使用與實際存儲的密鑰數量成比例的大小的數組。 不是直接使用密鑰作為數組索引,而是從密鑰計算數組索引。 利用散列,具有密鑰k的元素存儲在時隙h(k)中; 即,使用散列函數h來計算來自密鑰k的時隙。 h將密鑰集U映射到哈希表T [0..m-1]的槽中:h:U - > {0,1,...,m - 1}
Dictionary類是任何類的抽象父類,例如Hashtable,它將鍵映射到值。 每個鍵和每個值都是一個對象。 在任何一個Dictionary對象中,每個鍵最多與一個值相關聯。 給定一個Dictionary和一個鍵,可以查找關聯的元素。 任何非null對象都可以用作鍵和值。
根據字典的javadocs:
注意:此類已過時。 新實現應該實現Map接口,而不是擴展此類。
Hashtable也是JDK 1.0 vintage。 您應該更喜歡Map接口及其更現代的實現:HashMap和TreeMap。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.