欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Set判重操作实现 博客分类: 功能实现 sethash 

程序员文章站 2024-03-18 17:23:40
...
需求: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
相关标签: set hash