【发布时间】:2010-05-03 06:40:24
【问题描述】:
我已经使用内置的 java.util.hashtable 创建了一个程序,但现在我需要使用单独的链接来解决冲突。哈希表的这种实现是否可能?是否已经实现了使用单独的链接?
【问题讨论】:
我已经使用内置的 java.util.hashtable 创建了一个程序,但现在我需要使用单独的链接来解决冲突。哈希表的这种实现是否可能?是否已经实现了使用单独的链接?
【问题讨论】:
查看 Hashtable 实现的source,看起来它已经使用了单独的链接。如果您查看从第 901 行开始的 Entry<K,V> 类,您会看到它引用了另一个名为 next 的条目。如果您然后查看 put() 方法,在第 420 行,next 引用通过构造函数填充为之前存储在该存储桶中的任何元素。
请注意,您通常不应该关心诸如此类的实现细节。 Java Collections Framework 可能是 Java 中使用最广泛的框架之一,因此您应该假设作者已将性能调整为尽可能好。
我想指出的另一件事是 Hashtable 类已被HashMap 类(也使用单独的链接,请参阅here)所取代。两者的主要区别在于Hashtable 中的所有方法都是同步的,而HashMap 中则不是。这会在您在单线程环境中运行的情况下带来更好的性能(可能是这个问题的原因?)。
如果您确实需要线程安全的映射实现,那么您应该考虑在对Collections.synchronizedMap() 的调用中封装一个普通的HashMap,或者使用ConcurrentHashMap。
【讨论】: