【问题标题】:Java hashtable with separate chaining collision resolution?具有单独链接冲突解决方案的Java哈希表?
【发布时间】:2010-05-03 06:40:24
【问题描述】:

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

【问题讨论】:

    标签: java hashtable collision


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2013-10-01
      相关资源
      最近更新 更多