List集合去除重复对象

           大家好,我是一网菜鸟网(http://www.sklll.com)站长,网站目前正在维护中,今天在这里做一下List集合去除重复对象的简单文章说明,大家有什么不懂的可以给我留言或者到我群(225223397)内一起导论,我邮箱sklll@126.com。

        一般初级程序员老是会遇到2个问题,一个是排序,一个是去除重复,去除重复最头疼的一般的数组什么的比较简单,但是对象的话很多初级程序员就束手无策了。这里我们以实例来讲解去除重复对象的灵活使用方法。

       关于集合对象排序,前面已经讲过了,这里就不说了,集合对象去除重复主要是重写hashCode和equals方法。下面举例说明:


(一)实体类Cat.java

 

package com.skl.java.bean;
/**
 * 
 * @author 沈坤林
 * @date 2014年7月3日
 *
 */
public class CatInfo {
	
	private String catNo;
	
	private String catName;
	
	private String catSex;
	
	private int catAge;
	
	public CatInfo(String catNo, String catName, String catSex, int catAge) {
		super();
		this.catNo = catNo;
		this.catName = catName;
		this.catSex = catSex;
		this.catAge = catAge;
	}

	public String getCatNo() {
		return catNo;
	}

	public void setCatNo(String catNo) {
		this.catNo = catNo;
	}

	public String getCatName() {
		return catName;
	}

	public void setCatName(String catName) {
		this.catName = catName;
	}

	public String getCatSex() {
		return catSex;
	}

	public void setCatSex(String catSex) {
		this.catSex = catSex;
	}

	public int getCatAge() {
		return catAge;
	}

	public void setCatAge(int catAge) {
		this.catAge = catAge;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + catAge;
		result = prime * result + ((catName == null) ? 0 : catName.hashCode());
		result = prime * result + ((catNo == null) ? 0 : catNo.hashCode());
		result = prime * result + ((catSex == null) ? 0 : catSex.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		CatInfo other = (CatInfo) obj;
		if (catAge != other.catAge)
			return false;
		if (catName == null) {
			if (other.catName != null)
				return false;
		} else if (!catName.equals(other.catName))
			return false;
		if (catNo == null) {
			if (other.catNo != null)
				return false;
		} else if (!catNo.equals(other.catNo))
			return false;
		if (catSex == null) {
			if (other.catSex != null)
				return false;
		} else if (!catSex.equals(other.catSex))
			return false;
		return true;
	}
	
}

(二)测试类

 

package com.skl.java.docall;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import com.skl.java.bean.CatInfo;
/****
 * 
 * @author 沈坤林
 * @date 2014年7月3日
 *
 */
public class Test {
	
	public static void main(String[] args) {
		CatInfo c1 = new CatInfo("No.001","小红1","A",1);
		CatInfo c2 = new CatInfo("No.002","小红2","A",9);
		CatInfo c3 = new CatInfo("No.003","小红3","A",8);
		CatInfo c4 = new CatInfo("No.004","小红4","A",5);
		CatInfo c5 = new CatInfo("No.005","小红5","A",5);
		CatInfo c6 = new CatInfo("No.005","小红5","B",5);
		CatInfo c7 = new CatInfo("No.005","小红5","B",5);
		
		List<CatInfo> cats = new ArrayList<CatInfo>();
		cats.add(c1);
		cats.add(c2);
		cats.add(c3);
		cats.add(c4);
		cats.add(c5);
		cats.add(c5);
		cats.add(c5);
		cats.add(c6);
		cats.add(c7);
		
		Set<CatInfo> set = new LinkedHashSet<CatInfo>(); 
		set.addAll(cats); 
		cats.clear(); 
		cats.addAll(set); 
		System.out.println(cats.size());
		
	}

}
            这里打印的结果会是6个而不是7个,因为最后一个重复了。这里就是完全匹配是否想通了,如果对象每个字段完全相同的话就会把重复的去掉。有时候这并不是我们想要的效果。比如数据发生错误的时候,有2条数据catNo是一样的,而其他的信息有了变化,而我们只需要根据catNo来判断,这时候怎么办,如下:

(一)实体类:Cat.java

package com.skl.java.bean;
/**
 * 
 * @author 沈坤林
 * @date 2014年7月3日
 *
 */
public class CatInfo {
	
	private String catNo;
	
	private String catName;
	
	private String catSex;
	
	private int catAge;
	
	public CatInfo(String catNo, String catName, String catSex, int catAge) {
		super();
		this.catNo = catNo;
		this.catName = catName;
		this.catSex = catSex;
		this.catAge = catAge;
	}

	public String getCatNo() {
		return catNo;
	}

	public void setCatNo(String catNo) {
		this.catNo = catNo;
	}

	public String getCatName() {
		return catName;
	}

	public void setCatName(String catName) {
		this.catName = catName;
	}

	public String getCatSex() {
		return catSex;
	}

	public void setCatSex(String catSex) {
		this.catSex = catSex;
	}

	public int getCatAge() {
		return catAge;
	}

	public void setCatAge(int catAge) {
		this.catAge = catAge;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		//result = prime * result + catAge;
		//result = prime * result + ((catName == null) ? 0 : catName.hashCode());
		result = prime * result + ((catNo == null) ? 0 : catNo.hashCode());
		//result = prime * result + ((catSex == null) ? 0 : catSex.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		CatInfo other = (CatInfo) obj;
		/*if (catAge != other.catAge)
			return false;
		if (catName == null) {
			if (other.catName != null)
				return false;
		} else if (!catName.equals(other.catName))
			return false;*/
		if (catNo == null) {
			if (other.catNo != null)
				return false;
		} else if (!catNo.equals(other.catNo))
			return false;
		/*if (catSex == null) {
			if (other.catSex != null)
				return false;
		} else if (!catSex.equals(other.catSex))
			return false;*/
		return true;
	}
	
}
        这里你们会发现我们把其他属性都的对比都注释掉了,只有catNo没有去掉,Test类不变,运行结果是5,这就达到了我们的目的了。好了,List集合去除重复对象就这么简单了,更多内容关注个人网站,www.sklll.com



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值