当扫描文件中的单词并使用 API 中的内置 hashset 类时,我的单词计数返回 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]
使用新词[仅] 而不是向列表附加新节点,因此您会丢失该节点中已有的所有旧数据。
如果在调用 add()
之前没有元素,它应该可以正常工作,但如果有 - 你将丢失一些数据。
node = new Node(word);
buckets[key] = node;
尽管如果没有 Node
的实际实现,很难 100% 确定这一点。
关于java - 实现我自己的 HashSet 类...我的 add() 逻辑似乎有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856739/