用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)。