這裏是我的測試類..Java的:爲什麼在HashMap中尋找相同的變量時不叫等於方法
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
A a = new A(0, 1);
HashMap<A, Integer> map = new HashMap<A, Integer>();
map.put(a, (a.x + a.y));
System.out.println(map.containsKey(a));
System.out.println("----------------- ");
System.out.println(map.containsKey(new A(0, 1)));
}
}
,這裏是我的A級與哈希代碼和Eclipse生成等方法。
class A {
int x, y;
public A(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public int hashCode() {
System.out.println(" in hashcode");
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
System.out.println(" in equal");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
A other = (A) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
}
程序的輸出是
in hashcode
in hashcode
true
-----------------
in hashcode
in equal
true
我的問題是:(我知道哈希碼和平等的合同,爲什麼它被使用)
- 爲什麼在第一種情況下hashCode方法被稱爲twise?
- 爲什麼在第一種情況下平等不叫? JVM如何知道它是我們正在搜索的同一個變量?