读书人

关于HashMap的key变化有关问题?

发布时间: 2011-12-29 22:09:38 作者: rapoo

关于HashMap的key变化问题???
public class A {
private int i=0;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public int hashCode() {
return i;
}
public boolean equals(Object o){
return (o instanceof A) && (i==((A)o).getI());
}

public static void main(String[] args){
HashMap <A, String> hm = new HashMap <A,String> ();
A a = new A();
hm.put(a, "a ");
System.out.println( "@@@ "+hm.get(a));
a.setI(9);
System.out.println( "&&& "+hm.get(a));
}
}

输出结果为什么是:
@@@a
&&&null




[解决办法]
你搞错了,第一个hashCode是0,第二个才是9。不一样。
[解决办法]
key对象修改了,hashCode已经变了,HashMap中已经找不到这个key了,属于程序错误。
[解决办法]
这是hashmap的get方法代码,相信你看了以后就明白原因了:
public Object get(Object key) {
Object k = maskNull(key);
int hash = hash(k);
int i = indexFor(hash, table.length);
Entry e = table[i];
while (true) {
if (e == null)
return e;
if (e.hash == hash && eq(k, e.key))
return e.value;
e = e.next;
}
}

读书人网 >J2SE开发

热点推荐