您的位置:首页 > 其它

重写hashcode和equals的原因探究

2017-05-30 13:22 351 查看
大家都知道,map中存放的是键值对,值可以重复,键不可以重复。如果键不存在,则存入其中,如果键已存在。则新值替换旧值。而这个所谓的判断键是否存在就是这个键对象的hashcode值对比,当这两个值相同时,才会使用equals方法对比。当我们做一个购物车时,我们可能使用map的实现类hashmap;我们的键可能是一个实体类,实体类存放着我们购买商品的名称,编号和价格,而我们的值是商品的购买数量。而当我们买同一件商品new不同的实体类时,这时的键被认为是不同的,而我们想让两个同样的商品合并,这时我们就要在实体类里重写hashcode和equas方法了。

实体类Item

public class Item{
private String name;
private double price;
private int id;
//get和set方法省略
@Override
public int hashCode(){
return this.getId()+this.getName().hashCode();//相同字符串的hashcode值相同
}
@Override
public int equals(Object object){
if(this==obj){
return true;
}
if(obj instanceof Item){
Item i=(Item)obj;
if(this.getId()==i.getId() &&this.getName.equals(obj.getName)){
return true;
}
}else{
return false
}
}
}

以上重写了两个方法就可以按照我们自己的标准判断是否是相同元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: