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; } }