Set判重操作实现

需求:Set<Po>判重操作实现

问题:Set<Po>未进行排重

分析:对于基本数据相应的封装类的泛型;由于相应的封装类已经重写Object的hashcode与equals方法,故能够进行唯一性的区分

解决:

1.原集合

举例:

public class Man {
	private int id ;
	private String name ;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Man [id=" + id + ", name=" + name + "]";
	}
}

单元测试类:
	public static void main(String[] args) {

		Set<Man> set = new HashSet<Man>();
		Man m = new Man();
		m.setId(1);
		m.setName("1");
		Man m2 = new Man();
		m2.setId(1);
		m2.setName("2");
		set.add(m);
		set.add(m2);
		System.out.println("集合长度:"+set.size()+" "+"集合内容:"+set.toString());
	}

Console窗口输出
集合长度:2 集合内容:[Man [id=1, name=1], Man [id=1, name=2]]

2.改进,在Po类中重写 object 类中的 hashCode 与 equals 方法

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Man other = (Man) obj;
                // 指定唯一的条件,即PO类是通过哪一个字段判断唯一性的
		if (id != other.id)
			return false;
		return true;
	}

Console窗口输出
集合长度:1 集合内容:[Man [id=1, name=1]]

操作:
Eclipse中提供了重写方法的快捷方式:source -> generate hashcode() and equals ->
选择属性

原因:

参考文献: http://lukuijun.iteye.com/blog/340520

猜你喜欢

转载自mingyundezuoan.iteye.com/blog/2211543