自定義物件重寫hashCode和equals
阿新 • • 發佈:2018-11-08
自定義物件重寫hashCode和equals
/* * 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; } }