我有以下问题。我正在尝试在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)
方法中使用它?
答案 0 :(得分:4)
我会在枚举中添加一个抽象方法,因此不需要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);
}
所以你可以直接调用enum-method
int bucket = this.h.calcHash(e);
答案 1 :(得分:2)
您可以简单地切换它:
switch(this.h) {
case DivisionMethod: /*code*/; break;
case KnuthMethod: /*code*/; break;
}
答案 2 :(得分:1)
您似乎将HashingMethod
存储在名为h
的字段中。
要检查所选方法,请执行以下操作:
if (h == HashFunction.HashingMethod.DivisionMethod) {
// use division method
}
等