一个关于hashMap的containKey()的疑问

Fleetingtime512 2016-08-08 11:36:16
下面是我写的一段程序:
这是我定义的一个key类型,重写了equals()和hashCode()

import java.util.ArrayList;

public class MyKey {

private ArrayList<Long> content;

public ArrayList<Long> getContent() {
return content;
}

public void setContent(ArrayList<Long> content) {
this.content = content;
}

public int hashCode(){
String contentStr = "";

for(int i=0; i<content.size(); i++) {
contentStr += content.get(i) + " ";
}
return contentStr.hashCode();
}

public boolean equals(MyKey obj) {
if (obj instanceof MyKey) {
if(this.content.equals(obj.content))
return true;
}
return false;
}

public String toString(){
return content.toString();
}

}


这是驱动类

import java.util.ArrayList;
import java.util.HashMap;

public class HashMapTest {
private static HashMap<MyKey,Integer> map = new HashMap<MyKey,Integer>();

public static void main(String[] args){
ArrayList<Long> list1 = new ArrayList<Long>();
ArrayList<Long> list2 = new ArrayList<Long>();
MyKey mykey1 = new MyKey();
MyKey mykey2 = new MyKey();
list1.add(new Long(1));
list1.add(new Long(2));
list2.add(new Long(1));
list2.add(new Long(2));
mykey1.setContent(list1);
mykey2.setContent(list2);
map.put(mykey1, 3);
System.out.println(map);
System.out.println(map.containsKey(mykey2));
}
}

其中定义的没有mykey1和mykey2是一样的,在map中添加了mykey1,按道理判断是否存在mykey2,应该返回true啊,可结果怎么为false,,可能是我哪里理解错了,请教大神指点!!!
...全文
289 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewMoons 2016-08-09
  • 打赏
  • 举报
回复
大哥,你那个equals方法【 public boolean equals(MyKey obj)】不叫重写,叫重载。 重写的话(就是子类代替父类的方法)应该这么定义【 public boolean equals(Object obj)】 MyKey 虽然是Object的父类,但他们不是一个类! 自己看这篇文章吧: http://blog.csdn.net/fsz521/article/details/8739236
soton_dolphin 2016-08-09
  • 打赏
  • 举报
回复
equals(Object obj) 参数只能是Object 类
自由自在_Yu 2016-08-09
  • 打赏
  • 举报
回复
mykey1 和mykey1 用equals比较对象的值是相等的,但是mykey1==mykey2时false,这里的两个对象对应的内存地址不一样,所以 map.containsKey(mykey2)是返回false的。 public boolean equals(MyKey obj) { if (obj instanceof MyKey) { if(this.content.equals(obj.content)){ obj.content = this.content; //如果你的方法加上这个,就是把mykey1 赋给mykey2,就会返回true,你原来的方法就是判断了一下,没有处理 return true; } } return false; }
Fleetingtime512 2016-08-09
  • 打赏
  • 举报
回复
谢了各位,确实是equlas(Object obj)参数的问题,小弟懂了,谢谢!!!

62,614

社区成员

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

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