哈希表插入

时间:2015-04-18 17:51:05

标签: java hash

我不理解这段代码,将新元素插入数组(哈希表) 我知道如果它是空的,那么我们添加新元素,然后返回null(因为之前,值为null)。

但我在(e != null && !e.key.equals(c))时并不理解,这意味着虽然它不是空的,而且键不等于我们要添加的键?它不应该是相等的,因为我们使用indiHash(c)来查找我们添加新元素的数组中的位置,所以如果在同一个存储桶中它们应该具有相同的键:然后我们转到下一个,这意味着我们要在桶列表的完整末尾添加该元素?我也不明白

valuebefore = e.valor;
e.valor = v;

我们回来了什么?在我们添加新的元素之前,存储桶列表中最后一个元素的值?

我不明白怎么会有if (e != null)因为就在之前,在while循环中,我们确保当我们离开循环时e为空

public V insert(C c, V v) {

    V valuebefore = null;
    int position = indiHash(c);
    EntryHash<C, V> e = Array[pos];

    while (e != null && !e.key.equals(c))
        e = e.next;

    if (e == null) { 
        Array[position] = new EntryHash<C,V>(c, v, Array[position]);
        size++;
    } else { // 
        valuebefore = e.valor;
        e.valor = v;
    }
    return valuebefore;
}

1 个答案:

答案 0 :(得分:3)

许多不同的对象可以具有相同的哈希码。即使它们没有相同的数组,由于数组的长度远小于2 ^ 32(不同的可能哈希码的数量),具有不同哈希码的对象最终会在同一个桶中。

所以最终在同一个桶中的对象存储在一个链接的条目列表中。上面的代码尝试在此链表中查找具有等于插入键的键的条目。如果找不到,则会创建一个新条目并将其添加到链接列表中。否则,与找到的条目关联的值将替换为新值。