从散列线性探测中删除

时间:2016-06-04 22:52:02

标签: java hashtable

我无法弄清楚我的代码出了什么问题,但是在以下[null,null,null,PS]中删除了PS失败了

 /**
 * Removes the specified string from this hash table     
 * (if the string is in this table).    
 */
public void delete(String s) {
    // TODO
    int k = 0;
    for (int i=0;i<M;i++) {
        if (keys[i] != null) {
            if (keys[i] == s) {

                k = i;
        }
        }
    }
    keys[k] = null;
    for (int i=k;i<M;i++) {
        if (keys[i+1]!=null) {
            keys[i] = keys[i+1];
        }
    }
    N--;


    // halves size of array if it's 12.5% full or less
    if (N > 0 && N <= M/8) resize(M/2);
}

1 个答案:

答案 0 :(得分:2)

您没有指定错误是什么,但查看代码我看到了这些问题:

  1. String之间的比较应使用equals而不是==进行,否则您不会比较字符串的值,而是比较其参考
  2. 如果keys大小为M,那么keys[i+1]将导致第二个for循环的最后一个循环中的越界异常