- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Objects;
- /*
- * 需求:往HashSet中存入自定义的Person对象
- * Person包含两个域:姓名和年龄
- * 姓名、年龄均相同的Person是一个对象
- * 要求HashSet中不存在相同的Person
- * 思路:1、定义Person类存储字段
- * 2、创建HashSet集合保存Person对象
- * 3、重写Person的hashCode方法和wquals方法
- */
- class Person{
- private String name;
-
- private int age;
-
- Person(String name, int age){
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
-
- //重写hashCode方法
- @Override
- public int hashCode() {
- return (name == null ? "".hashCode() : name.hashCode()) + age;
- }
-
- //重写equals方法
- //我们的判断准则是name和age
- //也就是说,两个对象a和b,即使引用不同,也判定相等
- @Override
- public boolean equals(Object obj) {
- //快速排除非Person类型和null
- if(!(obj instanceof Person))
- return false;
- //强制转换
- Person p = (Person)obj;
- //千万别写this.name.equals(p.name)
- //因为不保证this.name不为null(即使这里没有set方法,可以通过反射更改为null)
- return Objects.equals(name, p.name) && Objects.equals(age, p.age);
- }
-
- @Override
- public String toString() {
- return "Person[name: " + name + " age: " + age + "]";
- }
- }
- public class HashSetDemo {
- public static void main(String[] args) {
- //创建HashSet
- HashSet<Person> hashSet = new HashSet<Person>();
- hashSet.add( new Person("A", 17));
- hashSet.add( new Person("B", 18));
- hashSet.add( new Person(null, 17));
- hashSet.add( new Person("B", 18));
- hashSet.add( new Person("C", 23));
- hashSet.add( new Person(null, 17));
-
- //遍历元素并打印
- for(Iterator<Person> it = hashSet.iterator();it.hasNext();){
- System.out.println(it.next());
- }
- }
- }
复制代码
|
|