【问题标题】:HashTable Java Implementation哈希表 Java 实现
【发布时间】:2021-09-14 17:40:23
【问题描述】:

我必须实现一个将使用数组的哈希表,但是必须遵循指南并为每个过程创建函数。 如果有人能帮我完成这项工作,我将不胜感激,因为我遇到了一些麻烦。

public class HashTable {

// public for testing purposes
public int buckets[];

public HashTable(long _a, long _c, long _m) {
}

public void insert(int key) {
}

}

到目前为止我得到了什么:

public class HashTable {

// public for testing purposes
public int buckets[];

public HashTable(long _a, long _c, long _m) {
    table = new Node[];
    
}

public void insert(int key) {
    Node<T> newNode = new Node(key);
    int posPosition = calPosition(key);
    
}

我已经包含了我到目前为止所做的事情。也许我走错了路。我理解这个概念,但到目前为止似乎无法为哈希表编写代码。非常感谢您的帮助,再次感谢

【问题讨论】:

  • SO 不是解决家庭作业的地方。我们可以帮助您纠正错误,但到目前为止您付出了哪些努力?
  • @Boug 我已经包含了我到目前为止所做的事情。也许我走错了路。我理解这个概念,但到目前为止似乎无法为哈希表编写代码。非常感谢您的帮助,再次感谢

标签: java data-structures hash hashtable


【解决方案1】:
  • 哈希表只是一个桶列表或数组。
  • 每个存储桶都包含该特定存储桶散列到的所有项。
  • 这些项目是包含您正在寻找的键和值的条目。

将某些内容放入哈希表时,您使用键/值对。如果桶在数组中,则使用 键的哈希码 来获取数组的正确索引。如果您使用链接列表,您可能需要计算位置。

然后使用另一个数组或链表来存储该单元格中的条目。链表更好,imo,因为可以添加它们而不必担心超出数组的大小。它们可以像常规链表一样添加到前面。

添加值时,创建条目,散列键并找到存储桶。然后将该条目添加到存储桶中。

检索值时,对键进行哈希处理,进入存储桶并在存储桶上进行线性搜索以找到您要查找的键的条目。然后返回该条目的值。

注意:与大多数哈希表一样,您不能有重复的键。任何用作密钥的Object 都必须覆盖equalshashCode 才能正常工作。

【讨论】:

  • 感谢您的澄清,这对您有很大帮助。我很困惑为什么有 3 个参数 a、c、m - 它们会代表键、值和我的哈希图吗?
  • 我不确定您所说的 a,c,m 是什么意思。假设密钥是一个名为 key 的变量中的某个字符串。你可以通过int hc = key.hashCode(); 找到哈希码。假设您有一个大小为 100 的数组来保存存储桶。您可以通过执行 int index = hc%100 来获得索引,这会为您提供介于 0 和 99 之间的余数(包括 0 到 99)。然后,您创建一个键和值的条目(想想类)并将该条目存储在存储桶中buckets[index]。要检索值,您需要反转该过程。这只是一种方法。另请注意,所有对象都从 Object 继承 hashCode() 方法。
  • 第 2 部分。像 Stringoverride hashCode and equals 这样的类已经为您完成(并且在大多数情况下通过 API 中的类(例如 Integer 和 Double))。这有帮助吗?
猜你喜欢
  • 2013-05-31
  • 2016-03-25
  • 2011-10-14
  • 2011-09-15
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
相关资源
最近更新 更多