【问题标题】:is there any scenario where hashtable is better than concurrenthashmap?有没有哈希表比并发哈希图更好的场景?
【发布时间】:2016-09-28 12:30:25
【问题描述】:

众所周知,ConcurrentHashMap 的性能更好,但我们能有任何场景使 Hashtable 更好吗?

【问题讨论】:

  • 您应该将苹果与苹果进行比较,这意味着Collections.synchronizedMap(new HashMap())ConcurrentHashMapHashtable 只不过是遗留物,自上次触及 Hashtable 以来,HashMap 有了许多改进。

标签: java collections


【解决方案1】:

在回答问题之前我会这样说:永远不要再使用HashtableHashtable 是 Java 1.0 的遗留工具,在 Java 2 之后引入的高级集合框架之前。

如果您需要简单的哈希映射,请使用HashMap。如果您需要执行线程安全,请使用ConcurrentHashMap。如果您需要简单的基本和非性能线程安全,请将HashMap 包装到Collections.synchronizedMap(Map)

现在按原样实际回答这个问题,这纯粹是比较两个特定的类,而没有看到可能性的范围:

是的,存在这样的场景

来自Hashtable documentation

如果不需要线程安全的实现,建议使用 HashMap 代替 Hashtable。如果需要线程安全的高并发实现,建议使用 ConcurrentHashMap 代替 Hashtable。

  1. 所以是的,Hashtable 适用于您需要线程安全实现但不“希望”高度并发实现的场景。这又是在ConcurrentHashMapHashtable 之间的排他比较。

  2. 另外,如果您需要Enumeration[1]Hashtable 有直接支持,而您必须通过Collections.enumeration(...) 获得其他Maps。


1. Enumeration 也是一个 Java 1.0 类。切换到Iterator(如果使用Java 2 到7)或Stream(如果使用Java 8+)

【讨论】:

  • 这是不完整的建议,因为 synchronizedMap(new HashMap())Hashtable 更好。
  • 哈希表在我看来已经过时了
猜你喜欢
  • 1970-01-01
  • 2014-01-24
  • 2012-02-22
  • 1970-01-01
  • 2013-03-21
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
相关资源
最近更新 更多