A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Objects;

  4. /*
  5. * 需求:往HashSet中存入自定义的Person对象
  6. * Person包含两个域:姓名和年龄
  7. * 姓名、年龄均相同的Person是一个对象
  8. * 要求HashSet中不存在相同的Person
  9. * 思路:1、定义Person类存储字段
  10. *      2、创建HashSet集合保存Person对象
  11. *      3、重写Person的hashCode方法和wquals方法
  12. */

  13. class Person{
  14.         private String name;
  15.        
  16.         private int age;
  17.        
  18.         Person(String name, int age){
  19.                 this.name = name;
  20.                 this.age = age;
  21.         }

  22.         public String getName() {
  23.                 return name;
  24.         }

  25.         public int getAge() {
  26.                 return age;
  27.         }
  28.        
  29.         //重写hashCode方法
  30.         @Override
  31.         public int hashCode() {
  32.                 return (name == null ? "".hashCode() : name.hashCode()) + age;
  33.         }
  34.        
  35.         //重写equals方法
  36.         //我们的判断准则是name和age
  37.         //也就是说,两个对象a和b,即使引用不同,也判定相等
  38.         @Override
  39.         public boolean equals(Object obj) {
  40.                 //快速排除非Person类型和null
  41.                 if(!(obj instanceof Person))
  42.                         return false;
  43.                 //强制转换
  44.                 Person p = (Person)obj;
  45.                 //千万别写this.name.equals(p.name)
  46.                 //因为不保证this.name不为null(即使这里没有set方法,可以通过反射更改为null)
  47.                 return Objects.equals(name, p.name) && Objects.equals(age, p.age);
  48.         }
  49.        
  50.         @Override
  51.         public String toString() {
  52.                 return "Person[name: " + name + " age: " + age + "]";
  53.         }
  54. }

  55. public class HashSetDemo {
  56.         public static void main(String[] args) {
  57.                 //创建HashSet
  58.                 HashSet<Person> hashSet = new HashSet<Person>();
  59.                 hashSet.add( new Person("A", 17));
  60.                 hashSet.add( new Person("B", 18));
  61.                 hashSet.add( new Person(null, 17));
  62.                 hashSet.add( new Person("B", 18));
  63.                 hashSet.add( new Person("C", 23));
  64.                 hashSet.add( new Person(null, 17));       
  65.                
  66.                 //遍历元素并打印
  67.                 for(Iterator<Person> it = hashSet.iterator();it.hasNext();){
  68.                         System.out.println(it.next());
  69.                 }
  70.         }
  71. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马