自定义对象重写hashCode和equals

自定义对象重写hashCodeequals

/*
          *  HashSet集合的自身特点:
          *    底层数据结构,哈希表
          *    存储,取出都比较快
          *    线程不安全,运行速度快
          */
         public class HashSetDemo1 {
          public static void main(String[] args) {
            
            //将Person对象中的姓名,年龄,相同数据,看作同一个对象
            //判断对象是否重复,依赖对象自己的方法 hashCode,equals
            HashSet<Person> setPerson = new HashSet<Person>();
            setPerson.add(new Person("a",11));
            setPerson.add(new Person("b",10));
            setPerson.add(new Person("b",10));
            setPerson.add(new Person("c",25));
            setPerson.add(new Person("d",19));
            setPerson.add(new Person("e",17));
            System.out.println(setPerson);
          }
         }
        
        public class Person {
          private String name;
          private int age;

          /*
           *  没有做重写父类,每次运行结果都是不同整数
           *  如果子类重写父类的方法,哈希值,自定义的
           *  存储到HashSet集合的依据
           *   
           *  尽可能让不同的属性值产生不同的哈希值,这样就不用再调用equals方法去比较属性
           *
           */
          public int hashCode(){
            return name.hashCode()+age*55;
          }
          //方法equals重写父类,保证和父类相同
          //public boolean equals(Object obj){}
          public boolean equals(Object obj){
            if(this == obj)
              return true;
            if(obj == null)
              return false;
            if(obj instanceof Person){
              Person p = (Person)obj;
              return name.equals(p.name) && age==p.age;
            }
            return false;
          }
          
          public String getName() {
            return name;
          }
          public void setName(String name) {
            this.name = name;
          }
          public int getAge() {
            return age;
          }
          public void setAge(int age) {
            this.age = age;
          }
          public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
          }
          public Person(){}
          
          public String toString(){
            return name+".."+age;
          }
         }

猜你喜欢

转载自blog.csdn.net/fang0321/article/details/83857527