【问题标题】:how to create a linked-list in a hash-table with the specific index?如何在具有特定索引的哈希表中创建链表?
【发布时间】:2015-07-21 07:53:04
【问题描述】:
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。我想知道如何在哈希表中创建链接列表?上面的代码几乎是错误的,但我希望它可以说明我的想法。因此,如果发生冲突,那么我想从该冲突索引开始创建一个链表。有人可以给我一些指导吗?谢谢!

【问题讨论】:

  • 你能告诉我们为什么吗? Java HashMap 在内部(使用树)为您执行此操作。如果你想真正将 List 放入现有的 hashmap 中,则需要将其声明为 HashMap&lt;List&lt;String&gt;&gt;,或者如果你想同时添加两者,则 HashMap&lt;Object&gt;(因为 StringList 没有其他通用接口)。跨度>
  • @eckes 对不起,我应该提前说明:我正在从头开始实现一个哈希表,而不使用哈希表、哈希图...再次感谢!

标签: java linked-list hashtable collision


【解决方案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 类维护内部“next”属性,用于构建冲突键的链表。

基本上,键值对在内部存储为 Entry 类的一个实例。如果发生冲突,新的 Entry 实例将作为下一个节点添加到插槽中的最后一项。伪代码:

table[i].next = newEntry;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2020-08-06
    • 2010-09-06
    • 1970-01-01
    相关资源
    最近更新 更多