Set判重操作实现 博客分类: 功能实现 sethash
程序员文章站
2024-03-18 17:23:40
...
需求:Set<Po>判重操作实现
问题:Set<Po>未进行排重
分析:对于基本数据相应的封装类的泛型;由于相应的封装类已经重写Object的hashcode与equals方法,故能够进行唯一性的区分
解决:
1.原集合
举例:
单元测试类:
Console窗口输出
集合长度:2 集合内容:[Man [id=1, name=1], Man [id=1, name=2]]
2.改进,在Po类中重写 object 类中的 hashCode 与 equals 方法
Console窗口输出
集合长度:1 集合内容:[Man [id=1, name=1]]
操作:
Eclipse中提供了重写方法的快捷方式:source -> generate hashcode() and equals ->
选择属性
原因:
参考文献:http://lukuijun.iteye.com/blog/340520
问题: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