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

标签 java algorithm data-structures addition hashset

当扫描文件中的单词并使用 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/

相关文章:

java - 如何计算字符矩阵中单词的所有出现次数?

java - 在同一轴上平移和旋转时出现奇怪的行为

algorithm - 首次出现并行字符串匹配算法

java - 如何保证Gson在toJson()中的输出是ASCII?

c - 确定给定代码的复杂性

java - 交叉记录列表

data-structures - 什么是 B*树?

algorithm - 将不等式合并为一个

Java float 自动舍入问题

java - minikube 中的损坏 jar