如何在具有特定索引的哈希表中创建链表?

时间:2015-05-10 21:49:42

标签: java linked-list hashtable collision

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。我想知道如何在哈希表中创建链表?上面的代码非常错误,但我希望它可以说明我在想什么。因此,如果存在冲突,那么我想从该冲突索引开始创建链表。请问有人给我一些指导吗?谢谢!

1 个答案:

答案 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;