java - 如何调用枚举函数?

标签 java hashmap

我有以下问题。我正在尝试用java实现HashMap,但它必须按照教授的条件来完成。他写了方法的大纲,以及它们的外观,所以除了从头开始编写 add(key, value) 函数之外,我无法更改任何其他内容。

public static enum HashingMethod {
        DivisionMethod,
        KnuthMethod
    };

DivisionMethod 和 KnuthMethod 都是 HashFunction 类中用于散列的函数。 如果有人要使用这个程序,他首先会创建一个 HashMap 类的实例:
HashMap hm = new HashMap(6, HashFunction.HashingMethod.DivisionMethod);

然后使用hm.add(3, "Ambulance")向其中添加元素。

这是 HashMap 的构造函数:

public HashMap(int m, HashFunction.HashingMethod h) {
        this.h = h;
        this.table = new LinkedList[m];
        for (int i=0; i<table.length; i++) {
            table[i] = new LinkedList<Element>();
        }
    }

我想知道的可能是基础知识,但它已经让我在很长一段时间内无法取得进展。

我如何知道已选择哪个哈希函数,以便可以在我的 add(key, value) 方法中使用它?

最佳答案

我会向枚举添加一个抽象方法,这样就不需要 ifswitch:

public static enum HashingMethod {
    DivisionMethod {
        @Override
        public int calcHash(Object o) {
            // do it
        }
    },
    KnuthMethod {
        @Override
        public int calcHash(Object o) {
            // do it
        }
    };

    public abstract int calcHash(Object o);
}

所以你可以直接调用枚举方法

int bucket = this.h.calcHash(e);

关于java - 如何调用枚举函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42905874/

相关文章:

java - 使用哈希表代替数据库系统

java - Maven 强制插件缺少或无效规则

java - 类应用监听配置错误

java - 出现预实例化单例错误

php - 在 redis 中存储对象的最佳方式是什么?

java - 声明HashMap中 vector 的大小

java - 使用默认方法解析字符串

Java:如何迭代Period对象中的天数

c++ - tbb::concurrent_unordered_multimap 中的错误?即使是单线程,条目也会丢失

java - HashMap 中的 1 对 1 映射