簡體   English   中英

Hashtable和Dictionary之間有什么區別?

[英]What's the difference between Hashtable and Dictionary?

DictionaryHashtable之間的區別是什么?我如何使用Java中的Dictionary類?

DictionaryHashtable的抽象基類。 為了向后兼容舊代碼,兩者仍然在JDK中。 我們期望使用HashMap和Java 1.2中引入的Map接口的其他實現。

字典的javadoc有你的答案。

Dictionary類是任何類的抽象父類,例如Hashtable,它將鍵映射到值。

您不直接使用Dictionary ,因為它是一個abstract類。

另請注意以下相同的文檔:

注意:此類已過時。 新實現應該實現Map接口,而不是擴展此類。

Dictionary是一個抽象類, Hashtable超類。 你不應該使用Dictionary因為它已經過時了 至於Hashtable,它比HashMap等其他地圖的優勢是線程安全,但是自Java 1.5以來引入了ConcurrentHashMap,沒有真正的理由再使用它了 - 請參閱javadoc

從Java 2平台v1.2開始,這個類被改進以實現Map接口,使其成為Java Collections Framework的成員。 與新的集合實現不同,Hashtable是同步的。 如果不需要線程安全實現,建議使用HashMap代替Hashtable。 如果需要線程安全的高度並發實現,那么建議使用ConcurrentHashMap代替Hashtable。

總結 :除非出於兼容性原因,否則不要使用DictionaryHashtable ,如果不需要線程安全,則使用HashMap如果在並發環境中使用地圖,則使用ConcurrentHashMap

HashtableDictionary一個實現。 您不能直接使用Dictionary ,因為它是一個抽象類。

但是你不應該使用它們,因為它們已被Map接口和實現類取代,其中HashMap是最受歡迎的。

我找到了一個關於OOP原理的講座,其中包含您尋求的答案:

http://www.clear.rice.edu/comp202/04-fall/lectures/lec23/

編輯:

字典計算中的一個主要主題是存儲/檢索/刪除的主題:將數據存儲在某處,以便以后可以在不再需要時檢索和丟棄,所有這些都以最有效的方式完成。 這些計算活動的抽象體現在所謂的字典的概念中,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM