今天在用到了HashMap来添加数据,发现有重复的key添加。查看java文档终于知道了解决方法。请看下面原来的例子:
class User {
private String id;
private String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
}
接下来主程序调用
HashMap hm = new HashMap();
User user = new User("1", "bbb");
User user1 = new User("1", "bbb");
hm.put(user , "a");
hm.put(user1 , "b")
猜下HashMap中有几个元素?
答案是有两个,原因是user和user1放在了不同的内存地址里面,user和user1传进去的是引用,那么怎么样实现HashMap没有值相同的Key呢?
方法很简单:只需要重写两个函数public boolean equals(Object obj); 和 public int hashCode()
class User {
private String id;
private String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
}
//固定不变的值
public int hashCode(){
return this.id;
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof User)) {
return false;
}
User = (User) obj;
if (this.id.equals(p.id)){
return true ;
} else {
return false ;
}
}
}
然后进行测试
HashMap hm = new HashMap();
User user = new User("1", "bbb");
User user1 = new User("1", "bbb");
hm.put(user , "a");
hm.put(user1 , "b")
你会发现,HashMap里只有一个Key了
至于HashCode要怎么实现,我认为可以任意实现,取得不好只是会影响HashMap的效率,另外想要插入重复的Key可以使用IdentityHashMap,详见java document