嗯,在我看來,對象的hashCode()可能與C++中的對象地址是一樣的,所以我期望在插入數據之前和之後對象的hashCode保持不變。爲什麼ArrayList在插入數據後更改其哈希碼?
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Created by charlie on 2015/12/11.
*/
public class Hello {
public static void main(String[] args) {
List<Integer> a = new ArrayList<>(1024);
a.add(0, 1);
System.out.println(a.hashCode());
a.add(1, 2);
System.out.println(a.hashCode());
}
}
但似乎輸出不同的值,因此這意味着插入值後,新的列表對象是原來的深層副本價值?
_in my opinion_你的意見是基於什麼? javadoc說什麼? –
hashCode不是地址,而是計算出的對象內容的散列值 – sidgate
通常,對對象進行變異將修改其哈希碼。它在技術上是可行的(儘管給出一個體面的散列函數是不可能的),您可能會以散列碼不會改變的方式進行轉換。 – Kevin