package collection;
import java.util.HashMap;
import java.util.Map;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map map=new HashMap();
map.put(new PhoneNumber(020,1234567),"xx");
System.out.println(map.get(new PhoneNumber(020,1234567)));
}
private static class PhoneNumber{
/**
* @param areaCode
* @param extension
*/
public PhoneNumber(int areaCode, int extension) {
this.areaCode =(short) areaCode;
this.extension = (short)extension;
}
private short areaCode;
private short extension;
public boolean equals(Object o){
if(o==this){
return true;
}
if(!(o instanceof PhoneNumber)){
return false;
}
PhoneNumber pn=(PhoneNumber)o;
return pn.extension==extension && pn.areaCode==areaCode;
}
//result就是我们得到的散列值,,计算过程有多种,这里只是个例子
public int hashCode(){
int result=17;
result=37*result+areaCode;
result=37*result+extension;
return result;
}
}
} [color=red] [size=xx-large]//结果是xx,就是查处了这个对象[/size][/color]
[color=blue][size=xx-large]======================================================================
======================================================================[/size][/color]
[color=red][size=x-large]上述的这段代码中,判断hashmap的键相等,使用了equals方法,但是equals方法又重写了,使用的是==判断。
我的问题是
1----hashcode()方法在hashmap中哪里有调用?或者用处是什么???
2---- "=="是判断栈中的引用是不是指向同一个堆中的对象,但map.get方法中是new了一个键值对象,就是说,指向的不是同一个键值对象,结果居然查到了,就是说,它们指向同一个对象!!!为什么??????
3----是不是所有hash有关的类,要比较相等,都要重写hashcode方法???
4----总结下我的问题,其实就是hashmap中 equals() hashcode() == 这三者用处各是什么,哪里用的到?????????[/size][/color]