HashMap.containsKey(vi)怎么会为false?(详见内)

niry 2002-05-22 01:36:54
class Vi{
char V;
char i;
public Vi(char _V, char _i) [
V = _V;
i = _i;
}
public boolean equals(Object o) {
Vi vi = (Vi)o;
return (vi.V==V)&&(vi.i==i);
}
}
HashMap m = new HashMap();
m.put(new Vi('*', 0), new Integer(4));
m.containsKey(new Vi('*', 0)) == false;// why?
...全文
354 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyalchemy 2002-05-22
  • 打赏
  • 举报
回复
在你的:
m.put(new Vi('*', 0), new Integer(4));
m.containsKey(new Vi('*', 0)) == false;// why?
中,两个key是两个不同的对象,怎么可能不是false呢!!!
这样就是了:
Vi myVi = new Vi('*',0);
m.put(myVi , new Integer(4));
m.containsKey(myVi ) == true 了
shihb 2002-05-22
  • 打赏
  • 举报
回复
我认为可能是因为你是用new方法来生成一个实例,两个实例是不一样的key。
ajoo 2002-05-22
  • 打赏
  • 举报
回复
override hashCode

int hashCode(){
return new Character(v).hashCode()*31 + new Character(i).hashCode();
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧