Java中的单独链接

时间:2012-10-16 03:53:27

标签: java arrays list hash

我们班正在学习哈希表,我的一个学习问题涉及到使用带有单独链接的哈希表创建字典。但是,问题是我们不允许使用Java提供的方法来创建哈希表。相反,我们的讲义提到单独的链接涉及数组中的每个单元格指向链接的条目列表。

因此,我的理解是我应该创建一个大小为n的数组(其中n是素数),并将空链表插入数组中的每个位置。然后,我使用我的哈希函数来散列字符串并将它们插入到正确数组位置的相应链表中。我创建了我的哈希函数,到目前为止,我的Dictionary构造函数接受了一个大小并创建了一个大小的数组(实际上,大小为4999,如课堂上讨论的那样是素数和大数)。我在这里走在正确的轨道上吗?我现在应该在每个位置插入一个新的链表,然后处理插入/删除方法吗?

2 个答案:

答案 0 :(得分:1)

到目前为止你听起来不错。

请记住,默认情况下,每个单元格null都有一个对象引用数组,您可以编写插入和删除函数来使用它。如果您选择创建不包含任何数据的链接列表对象(有时称为 sentinel节点),则创建一个单个不可变(只读)实例以放入每个空插槽可能更有利,而不是用new创建4,999个单独的实例(其中大多数不包含任何数据)。

答案 1 :(得分:0)

听起来你走在正确的轨道上。

一些额外的指示:

  • 在实际使用之前,不值得在每个桶中创建LinkedList。所以你可以将桶保留为null,直到它们被添加到。请记住编写您的访问者功能以考虑到这一点。
  • 立即创建大型数组并不总是有效的。最好从一个小阵列开始,跟踪所使用的容量,并在必要时扩大阵列(包括将值重新分配到新阵列中)。
  • 让你的类实现整个Map<K,V>接口是个好主意 - 只是为了实现其他标准Java集合方法的实践。