1. 程式人生 > >自定義物件重寫hashCode和equals

自定義物件重寫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;
          }
         }