public boolean isCollide(String key, String value){
int index = key.hashCode();
if (this.key_array[index]==null) return false;
else return true;
}
public void addValue(String key, String value){
Hashtable hashtable = new Hashtable(key,value);
int index = key.hashCode();
if (isCollide(key,value)) {
hashtable.key_array[index]=key;
hashtable.value_array[index]=value;
}
else{
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add(value); //how to create a linkedlist on a hashtable?
}
}
我正在从头开始实现Hashtable。我想知道如何在哈希表中创建链表?上面的代码非常错误,但我希望它可以说明我在想什么。因此,如果存在冲突,那么我想从该冲突索引开始创建链表。请问有人给我一些指导吗?谢谢!
答案 0 :(得分:1)
以下是Java HashMap在内部执行的操作:
class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
int hash;
/**
* Creates new entry.
*/
Entry(int h, K k, V v, Entry<K,V> n) {
value = v;
next = n;
key = k;
hash = h;
}
// rest of methods here...
}
Entry class维护内部&#34; next&#34;用于构建碰撞键链表的属性。
基本上,键和值对在内部存储为Entry类的一个实例。如果发生冲突,则将新的Entry实例添加为插槽中最后一项的下一个节点。伪代码:
table[i].next = newEntry;