1. 程式人生 > >HashSet,hashCode(),equals(),記憶體洩漏

HashSet,hashCode(),equals(),記憶體洩漏

1.使用HashSet之前,一定要實現儲存物件的hashCode(),equals(),

2.HashSet使用不當(儲存物件的hash值改變),可能會造成記憶體洩漏

import java.util.HashSet; import java.util.Set;

public class MemoryLeap {          public static void main(String[] args){                  Set<Person> set = new HashSet<Person>();          Person p1 = new Person("唐僧","pwd1",25);          Person p2 = new Person("孫悟空","pwd2",26);          Person p3 = new Person("豬八戒","pwd3",27);          set.add(p1);          set.add(p2);          set.add(p3);         System.out.println(set.size());//輸出3         p3.setAge(2);//p3的hash值改變,         set.remove(p3);//remove不掉         set.add(p3);//新增成功!!         System.out.println(set.size());//輸出4              } } **************************Person類程式碼如下**********************************

public class Person {     public String name;     public String pwd;     public int age;     public  Person(String name,String pwd,int age){         this.age=age;         this.name=name;         this.pwd=pwd;     }     public void setAge(int age){         this.age=age;     }     @Override     public boolean equals( Object obj){         return (this.name.equals(((Person) obj).name));              }

@Override     public int hashCode(){         return this.name.hashCode()+age;              } }