我有以下问题。我正在尝试用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)
方法中使用它?
最佳答案
我会向枚举添加一个抽象方法,这样就不需要 if
或 switch
:
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/