我想将一段时间内创建的对象放入一个hashmap中,我希望它根据对象的当前状态进行存储。
所以我想知道这个对象的哈希码是什么时候计算出来的:创建它或者放入地图的时候。如果是第一种情况,如何存储当前状态。
非常感谢。
编辑:我实际上是指在将其插入地图时根据状态存储它。抱歉误导。
答案 0 :(得分:2)
只要任何代码调用对象的hashCode()
方法(例如集合,容器或任何其他方法),就会检索对象的哈希码。
所有类都从基础继承基本哈希方案 类
java.lang.Object
,但许多重写此提供一个 更好地处理其特定数据的哈希函数。哪些课程 提供自己的实现必须覆盖对象方法 public int 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()。