【发布时间】:2015-06-25 13:52:20
【问题描述】:
我不明白这段代码,向数组(哈希表)插入一个新元素 我知道如果它是空的,那么我们添加新元素,我们返回null(因为之前的值是null)。
但是我不明白while(e != null && !e.key.equals(c)),意思是虽然它不为空并且key不等于我们要添加的那个?它不应该是相等的吗,因为我们使用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;
}
【问题讨论】: