gpt4 book ai didi

java - 实现我自己的 HashSet 类...我的 add() 逻辑似乎有问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:46 25 4
gpt4 key购买 nike

当扫描文件中的单词并使用 API 中的内置哈希集类时,我的单词计数返回 349(这是它应该是的)

使用我自制的 hashset 类,我得到 235... 所以我的 add() 方法中一定有错误,但我不明白它是什么。

感谢您的帮助!

public class HashWordSet implements WordSet {

private int size = 0;
private Node[] buckets = new Node[8];

public Iterator<Word> iterator() {
return new WordIterator();
}

//Add word if not already added
public void add(Word word) {
int key = getBucketNumber(word);
Node node = buckets[key];
while (node != null) {
if (node.value.equals(word))
return;
else
node = node.next;
}
node = new Node(word);
buckets[key] = node;
size++;
if (size == buckets.length) rehash();
}

private int getBucketNumber(Word word) {
int hc = word.hashCode();
if (hc < 0) hc = -hc;
return hc % buckets.length;
}

最佳答案

您似乎用新词覆盖 nodes[key] [only] 而不是将新节点附加到列表中,所以您会丢失该节点中已有的所有旧数据。

如果在调用 add() 之前那里没有元素,它应该可以正常工作,但如果有 - 您将丢失一些数据。

node = new Node(word);
buckets[key] = node;

虽然如果没有 Node 的实际实现,很难 100% 确定它。

关于java - 实现我自己的 HashSet 类...我的 add() 逻辑似乎有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com