何时计算哈希码

时间:2014-04-27 02:42:52

标签: java hash

我想将一段时间内创建的对象放入一个hashmap中,我希望它根据对象的当前状态进行存储。

所以我想知道这个对象的哈希码是什么时候计算出来的:创建它或者放入地图的时候。如果是第一种情况,如何存储当前状态。

非常感谢。

编辑:我实际上是指在将其插入地图时根据状态存储它。抱歉误导。

2 个答案:

答案 0 :(得分:2)

只要任何代码调用对象的hashCode()方法(例如集合,容器或任何其他方法),就会检索对象的哈希码。

  

所有类都从基础继承基本哈希方案   类java.lang.Object,但许多重写此提供一个   更好地处理其特定数据的哈希函数。哪些课程   提供自己的实现必须覆盖对象方法   public int hashCode()。

参考:java hashCode()

答案 1 :(得分:1)

感谢David Wallace的提醒,我在hashmap中找到了这段代码:

public V put(K key, V value) {
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }

当把它放入hashmap时它确实会调用hashCode()。