来自hashmap

时间:2016-06-01 17:16:24

标签: java hashmap

我有HashMap,我试图根据以下算法删除元素:

  1. 当一个单元i被清空时,需要向前搜索该表的下列单元格,直到找到另一个空单元格或可以移动到单元格i的键(即,其哈希值相等的键)比i)更早或更早。
  2. 当找到空单元格时,清空单元格i是安全的,删除过程终止。
  3. 但是,当搜索找到可以移动到单元格i的键时,它会执行此移动。以相同的方式继续搜索新的清空单元格,直到它通过到达已经为空的单元格终止为止。
  4. 来源:https://en.wikipedia.org/wiki/Linear_probing#Deletion

    这就是我现在所拥有的,但是看看我的测试,实际上并没有删除。你能帮我弄明白为什么吗?提前致谢

    hashFunction()的结果是计算哈希值。

    public class MyHashMap {
    
        Person[] array;
    
        public void remove(Person p) {
            int i = hashFunction(p);
            while (!p.equals(array[i])) {
                i = hashFunction(array[++i]);
            }
            int b;
            while (array[i] != null) {
                b = hashFunction(array[++i]);
                if (b <= hashFunction(array[i])) {
                    Person newHash = array[i];
                    array[i] = null;
                    array[i++] = newHash;
                    remove(array[i++]);
                }
                else if (array[++i] == null) {
                    array[i] = null;
                }
            }
        }
    

1 个答案:

答案 0 :(得分:0)

您的增量后和增量前运营商会为您的问题做出贡献。例如,

array[i] = null;
array[i++] = newHash;

在此,您要将null分配给array[i],然后在newHash递增之前再次将array[i]分配给i。您实际上想要使用++i而不是i++