哈希表内部索引

3

我该如何访问Java Hashtable的内部数组表示?我知道hashtable只是巧妙地组织成数组,我想使用每个键的索引,以便可以与Disjoint set并行工作。

我需要以下两种信息之一:

  1. 将我的键转换为散列表内部数组中的索引所使用的哈希函数
  2. 相应键的索引。

我认为如果你需要这样的东西,最好使用自己实现的哈希表。或者从某个地方复制现有的哈希表并使用它。因为如果你使用第三方或标准类,那么它的内部实现可能会改变,导致你的程序崩溃。 - Mikita Belahlazau
好的,是的,我只是很忙,希望我能够绕过重写我的哈希表之一。无论如何,谢谢大家。 - Ben Kellman
3个回答

4
注意1:在90%的情况下,您可能应该使用HashMap类而不是Hashtable
注意2:实际上,大多数哈希表都将列表与数组结合在一起,以处理哈希冲突。
通常情况下,您不能达到Java实现中提供的类的内部。这将使Java提供接口和实现之间明确分离的整个目的落空。
我建议您创建一个新类,例如MyHashMap,通过复制来自Java开发工具包的HashMap实现的源代码。通过拥有自己的副本,您可以完全控制,并且不会受到JRE更新后出现的意外损坏的影响。您可以在此处找到OpenJDK的HashMap实现here

PS:理论上,您可以尝试使用反射访问HashMap的内部,但是生成的代码将会非常糟糕,性能甚至更差...


哈希表有什么好处?我还没有学过它们。 - Ben Kellman
@BenKellman:在内部,这两个类非常相似 - 主要区别在于Hashtable是同步的,这通常意味着相当不必要的开销。它也比较老,这意味着它的接口相对于新的类来说比较混乱,其中包含了一些已经不再使用的接口。 - thkala

0

我相信你可以通过反射访问任何字段,只需查看Hashtable内部即可。

或者你只是在寻找代码示例?


0
创建一个类似于哈希表的类,按字母顺序为键分配索引。扩展HashMap或类似的东西对你的目的可能甚至不必要。这将会很有趣。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接