Set去重实体类

我们知道set是无序且不重复的,但set不能去重我们自己定义的实体类,如果想根据一定的规则去重实体类,比如如果这个实体类中的ID相同就去重,这时候我们就要在这个实体类中重写hashCode和equals方法,

	/**
	 * 对象去重就必须重写hashCode和equals方法,(系统类已经重写)
	 * set是无序且不重复的,set的底层add方法是基于map的put的方法,map的K又基于Object的hash值
	 * 我们知道每个对象被new出来他们的物理地址hash都不一样,所以在set去重对象的时候不太适用,我们需要重写hashCode和equals方法
	 * set去重时会先判断hashCode,如果hashCode不同则直接add,如果相同会去equals,他们是&&的关系,都想同则为一个对象
	 * 现在我们将去重改成,如果对象中的orderNumber属性的值相同就去重
	测试直接返回1,ok,但是每个对象的hashCode都一样,会多次去判断equals去重,效率低下,所以返回动态hashCode
	@Override
	public int hashCode(){
		return 1;
	}
	 */
	@Override
	public int hashCode(){
		int result=17;
		result=31*result+orderNumber.hashCode();
		return result;
	}
	@Override
	public boolean equals(Object obj){
		super.equals(obj);
		if(obj==null){
			return false;
		}
		TechnologyStatement te=(TechnologyStatement)obj;
		if(this.getOrderNumber().equals(te.getOrderNumber())){
			return true;
		}
		return false;
	}

参考:https://baijiahao.baidu.com/s?id=1576860126059183009&wfr=spider&for=pc&isFailFlag=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值