将数据插入hashMap

时间:2017-10-22 01:44:25

标签: java hash hashmap hashcode

我有一个hashMap的实现。当调用get()函数时,它返回输入键的关联值(如果存在),遍历映射以查看它是否可以找到具有与输入等效的键的条目,并且还共享相同的哈希码。如果是,则返回相关值。

我了解到错误发生在从我的put(Object K,Object V)函数分支的辅助方法中。

public V put(K key, V value) {
    System.out.print("KEY at PUT IS " + key);
    if (key == null) {
        ...
        return null;
    }
    int hash = key.hashCode();
    int bucket = hash(hash, table.length);
    System.out.println("Key is " + key + "bucket is " + bucket + "hash is " + hash);
    ...

    add(hash, key, value, bucket);
    return null;
}

辅助功能的相关部分如下。

private void add(int hash, K key, V val, int bucket) {
    Entry<K, V> e = table[bucket];

    System.out.println("table[bucket] before adding a value is " + table[bucket]);
    System.out.println("key in ADD is " + key + "HASH in ADD " + hash);

    table[bucket] = new Entry<K, V>(key, val, e);
    size++;

    System.out.println(" table[bucket] is now " + table[bucket].key + " table[bucket] hash is now" + table[bucket].hashCode());

    ...
}

现在,如果我创建一个新的hashMap,x,并调用x.put(“foo”,2);打印以下内容。

PUTTING 2
...
(we reach the add function)
table[bucket] before adding a value is null
Key in ADD is foo, HASH in ADD 101574
table[bucket] is now foo, table[bucket] hash is now 3149757

我的假设是它与我输入新条目的方式有关。但是,新条目只是使用键,值和“下一个”项进行实例化。因此,经过长时间的调试后,我无法理解hashCode是如何从101574更改为3149757的。

我读了这个问题,看看插入数据可以改变以前的hashCode。

when add key-value pair to a hashMap, why Java makes hashMap's hashCode change?

但是,我已经看到了几个实现这似乎不是问题的实现。     这个hashCode应该保持不变吗?

0 个答案:

没有答案