【问题标题】:Hash Table Chaining哈希表链接
【发布时间】:2013-04-29 23:06:19
【问题描述】:
 public void put(int key, int value) {
        int hash = (key % TABLE_SIZE);
        if (table[hash] == null)
            table[hash] = new LinkedHashEntry(key, value);
        else {
            LinkedHashEntry entry = table[hash];
            while (entry.getNext() != null && entry.getKey() != key)
                entry = entry.getNext();
            if (entry.getKey() == key)
                entry.setValue(value);
            else
                entry.setNext(new LinkedHashEntry(key, value));
        }
    }

我刚刚学习哈希表链接的概念,我想如果我们添加一个新项目。我们将查看该项目的密钥是否存在,如果存在,我们只需将其链接到具有相同密钥的同一节点。但是刚刚在哈希表链接标题下在线找到此代码,但它并没有按照我的假设到。要么我错了,要么这个代码。这部分让我最困惑:

if (entry.getKey() == key)
                entry.setValue(value);

这将与它在开放地址散列中所做的相同。您只需用新节点替换旧节点。只需完整定义哈希表和哈希表链接及其差异的示例。

谢谢,

【问题讨论】:

  • 这段代码看起来是正确的。您提到的行使用现有节点并覆盖该值,这是正确的。您能否更具体地说明您的困惑?
  • 链接不同的部分是else case。

标签: java data-structures hashtable chaining


【解决方案1】:

哈希表链是一种哈希表的实现。它用于减少散列哈希冲突。例如,一个名为 A 的项目的哈希值为 100,而另一个项目已经存在于 table[100] 上。输入项A,在开放地址散列的情况下,项A会在表中插入索引为101的项,这会增加哈希冲突的机会(如果将来另一个项的哈希值为101)。而哈希表链不会。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2020-09-03
    • 2022-01-10
    • 2021-06-25
    相关资源
    最近更新 更多