重写hashcode和equals的原因探究

大家都知道,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
	}
	}
}

以上重写了两个方法就可以按照我们自己的标准判断是否是相同元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值