【发布时间】:2012-01-03 14:52:25
【问题描述】:
当我尝试使用 hashtable 类时,Netbeans 给我一个错误提示:
虽然仍受支持,但这些类已被 JDK1.2 集合类淘汰,可能不应该在新的开发中使用。
但是,我似乎无法在网上找到更好地替代 Hashtable 的示例。有什么建议吗?
【问题讨论】:
-
一般来说,你应该使用HashMap。
标签: java
当我尝试使用 hashtable 类时,Netbeans 给我一个错误提示:
虽然仍受支持,但这些类已被 JDK1.2 集合类淘汰,可能不应该在新的开发中使用。
但是,我似乎无法在网上找到更好地替代 Hashtable 的示例。有什么建议吗?
【问题讨论】:
标签: java
【讨论】:
Collections.synchronizedMap()装饰一个普通的HashMap,或者使用ConcurrentHashMap,无需加锁即可并发读取和修改。
你可能会使用 Hashmap:
Map<String, Integer> mymap = new HashMap<String, Integer>();
【讨论】:
你应该使用HashMap,但它不是为并发环境设计的,你可以使用ConcurrentHashMap。
或
Map<K,V> myMap = Collections.synchronizedMap(/*any map instance*/);
【讨论】:
在某些情况下,您无法控制的方法需要Hashtable。
Java 自己的javax.management.ObjectName 是
这样的例子[1].
当外部接口需要它时,您必须使用Hashtable。
在 netbeans 中,您可以使用:
@SupresssWarnings("UseOfObsoleteCollectionType")
在本地抑制警告。
见
1:我想知道他们为什么使用Hashtable 而不是HashMap,因为ObjectName 是
自 1.5 起可用,Hashtable 自 1.2 起已过时
【讨论】:
总结
最接近的替代品是 HashMap(通常通过 Map 接口)。
但请注意,Hashtable 是线程安全的,而 HashMap 不是。 在大多数情况下这不是问题,并且有意使大多数 Java 集合成为非线程安全的,以避免大多数常见情况下的性能损失。但是,如果您依赖 Hashtable 线程安全并且现在需要一个同样是线程安全的替代品,那么您有两种选择:
【讨论】: