2

我已经使用内置的 java.util.hashtable 创建了一个程序,但现在我需要使用单独的链接来解决冲突。哈希表的这种实现是否可能?是否已经实现了使用单独的链接?

4

1 回答 1

4

查看 Hashtable 实现的源代码,看起来它已经使用了单独的链接。如果您查看Entry<K,V>从第 901 行开始的类,您会看到它引用了另一个名为 的条目next。如果您然后查看该put()方法,则在第 420 行,next引用通过构造函数填充为先前存储在该存储桶中的任何元素。

请注意,您通常不应该关心诸如此类的实现细节。Java Collections Framework 可能是 Java 中使用最广泛的框架之一,因此您应该假设作者已将性能调整为尽可能好。

我想指出的另一件事是 Hashtable 类已大部分被HashMap该类取代(它也使用单独的链接,请参见此处)。两者的主要区别在于 in 的所有方法Hashtable都是同步的,而 inHashMap则不是。这会在您在单线程环境中运行的情况下带来更好的性能(可能是这个问题的原因?)。

如果您确实需要一个线程安全的映射实现,那么您应该考虑HashMap在对 的调用中包装一个法线Collections.synchronizedMap(),或者使用一个ConcurrentHashMap.

于 2010-05-03T09:06:31.187 回答