Javaでさまざまなデータ構造をコーディングしてインタビューの準備をしています。ただし、静的コンテキストでのジェネリック型に少し問題があります。ジェネリックパラメーターを受け取る静的である必要があるハッシュ関数がありますが、コンパイラーにはそれがありません。このエラーが発生している理由と、問題へのより適切なアプローチ方法に関するヘルプをいただければ幸いです。
public class Hashtable<K extends Comparable, T> {
private int num_elem;
private int num_buck;
private ArrayList<LinkedList<Pair<K, T>>> buckets;
private class Pair<K, T> {
K key;
T value;
Pair(K key, T value) {
this.key = key;
this.value = value;
}
}
public Hashtable(int size) {
this.num_elem = size;
this.num_buck = (int) (num_elem * 1.2);
this.buckets = new ArrayList<LinkedList<Pair<K, T>>>();
for (int i = 0; i < num_buck; i++)
buckets.add(new LinkedList<Pair<K, T>>());
}
public static int hash(K key) {
return (System.identityHashCode(key) * num_buck) / 97;
}
public static int compress(int hashval) {
return hashval % num_buck;
}
public void add(K key, T value) {
Pair p = new Pair<K, T>(key, value);
int hashval = Hashtable.hash(key);
buckets.get(Hashtable.compress(key)).add(p);
}
public T find(K key) throws exception {
int hashval = Hashtable.hash(key);
LinkedList<Pair<K, T>> ll = buckets.get(Hashtable.compress(hashval));
Iterator iter = ll.iterator();
while (iter.hasNext()) {
Pair<K, T> p = iter.Next();
if (p.key.compareTo(key) == 0)
return p.value;
}
throw new Exception("Key not in HashTable");
}
public void remove(K key) {
}
public static void main(String[] args) {
}
}