7

我有点惊讶没有人问过这个具体案例,因为它在 java 标准库中是一种奇怪的不一致:

我正在使用带有自定义标签的swing JSlider;唯一可用于分配标签的库调用是:setLabelTable(Dictionary labels)

但是 Dictionary 是一个抽象类,它在标准库中唯一已知的子类是 Hashtable,api 和各种 IDE 抱怨它是“过时的”。

显而易见的事情就是使用哈希表,但我想知道两件事:

  1. 有没有更好的方法来解决这个问题?
  2. 如果 Hashtable 是这个(在我看来)相当重要的库调用的唯一可用类,那么它在什么基础上“过时”?

谢谢!

4

3 回答 3

4

它已过时,因为它已被 java.util.HashMap 取代。主要区别在于 HashTable 上的方法是同步的,而 HashMap 允许使用空指针作为键。

现代版本的 java 在无争议的同步操作的性能方面取得了长足的进步,因此不再像过去那样担心性能问题。(如果您在主要平台上运行最新的 JDK。)如果 API 需要 HashTable,请继续使用它。

于 2012-07-17T20:54:21.923 回答
2

Hashtable 过时的原因是它已被 Hashmap 取代

但是,为了给 setLabelTable 分配标签,Hashtable 的“缺陷”不是问题。

于 2012-07-17T20:53:05.260 回答
0

Dictionary被“替换”Map为. A很慢,因为它是同步的,所以标准选择也是如此。 我不确定你为什么担心你使用“遗留”数据结构,因为如果你必须使用 a你必须使用. 也许您应该想知道要使用哪些小部件?只是一个想法...HashTableHashMap
HashTableHashMap
JSliderHashMap

于 2012-07-17T21:04:50.020 回答