簡體   English   中英

什么時候應該使用 Hashtable 和 HashMap

[英]When should I use a Hashtable versus a HashMap

這不是關於HashtableHashMap之間差異的問題。 我知道Hashtable對象不能接受鍵或值條目的null值,它是同步集合,並且它使用的內存比HashMap略少。

我想知道使用Hashtable而不是HashMap更合適的場景。

這不是HashtableHashMap區別的問題

嗯,這真的...

我想知道使用Hashtable而不是HashMap更合適的場景。

正是當您想要兩者之間的差異時:

  • 當您想在 Java 1.1 上運行時
  • 當您希望每個操作都同步時(為您提供一種線程安全形式,只要您從不對其進行迭代) - 並且出於某種原因不想在HashMap上使用Collections.synchronizedMap
  • 當您不想存儲空值時
  • 當內存差異實際上很重要時(只有在您證明情況如此之后) - 我個人甚至不知道這種差異......
  • 當你被一個討厭的 API 強迫時,它返回或接受Hashtable (相對罕見,幸運的是)

我個人不記得上次遇到這種情況是什么時候 - 我會說在現代 Java 代碼中使用Hashtable是非常罕見的。

絕不。

Hashtable是 Java 1 中映射的原始實現。它已被Java Collections Framework 中定義的Map<K,V>實現取代。 當然, Hashtable已經被改造以實現Map但這並不是非常有用。

它的主要問題在於它是同步的。 這意味着它在線程之間共享的任何情況下都會很慢。 ConcurrentHashMap在這種情況下是更好的選擇。 如果您在單線程上運行,那么未同步的HashMap是更好的選擇。

在 JNDI 中使用InitialContext

我只能想到一個正當理由——當您使用需要它的 API 時,例如JNDI非常惱人的InitialContext類。

除此之外,我看不出使用Hashtable充分理由。 您可以使用Collections.synchronizedMap獲取HashMap的同步版本,或使用ConcurrentMap實現,例如ConcurrentHashMapConcurrentSkipListMap

我只在遺留應用程序/庫中看到哈希表。

如果可以,如果需要同步 Map,請使用 ConcurrentHashMap 或 Collections.synchronizedMap。

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#synchronizedMap%28java.util.Map%29

知道何時使用一個類或結構而不是另一個本質上是了解兩者之間的差異,並根據這些差異決定哪一個最適合手頭的問題。

我了解 Hashtable 對象不能接受空值

因此,在需要存儲空值的情況下, Hashtable將不合適。

此外,在Hashtable ,枚舉不是故障安全的。 因此,如果您需要能夠在枚舉時更改結構的內容,則Hashtable會更合適。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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