用Java替换过时的Hashtable类

当我尝试使用哈希表类时,Netbeans给了我一个错误说:

虽然仍然受到支持,但这些类已被JDK1.2集合类淘汰,并且可能不应该在新开发中使用。

但是,我似乎无法在网上找到一个更好的替代Hashtable的例子。 有什么建议么?

HashMap最直接的替代是HashMap

可能重要的差异是Hashtable所有相关方法在HashMap同步时是同步的。

HashMap更好的替代HashMap

至于过时,我没有提到它,但Javadoc说:

从Java 2平台v1.2开始,这个类被改进以实现Map接口,使其成为Java Collections Framework的成员。

HashMap不同, Hashtable是同步的。

您应该使用HashMap,但它不是为并发环境设计的,您可以使用ConcurrentHashMap

要么

 Map myMap = Collections.synchronizedMap(/*any map instance*/); 

您可以使用Hashmap:

 Map mymap = new HashMap(); 

有些情况下,控制之外的方法需要Hashtable 。 Java自己的javax.management.ObjectName就是这样一个例子[1]

当外部接口需要它时,您必须使用Hashtable 。 在netbeans中,您可以使用:

 @SupresssWarnings("UseOfObsoleteCollectionType") 

在本地抑制警告。

看到

  • Java:@SuppressWarnings(…)参数的完整列表(在Netbeans中)?
  • 在Java中抑制不推荐使用的导入警告

1:我想知道为什么他们使用Hashtable而不是HashMap ,因为ObjectName从1.5开始可用,而Hashtable从1.2开始就已经过时了

  • 对于正常(即非并发访问) – 使用HashMap(通常通过Map接口)。
  • 如果您需要现有Map的简单同步包装器 – 请使用Collections.synchronizedMap(…)
  • 如果您需要一个仔细且经过优化设计的类来进行并发访问 – 请使用ConcurrentHashMap(通常通过ConcurrentMap接口扩展Map接口以及其他并发function)。