HashSet集合对其元素的判断是依据当中的hashCode()方法得出的哈希值。如果你存入一个元素,然后你改掉了这个元素的内容,导致它的hash值发生改变。这时如果你想在集合中删除这个元素,这个时候就删不了。这种数据多了,就导致内存泄漏。
举个例子:
- import java.util.*;
- class Demo
- {
- public static void main(String[] args)
- {
- HashSet hs = new HashSet();
- Person p1 = new Person("ni",20);
- Person p2 = new Person("wo",21);
- Person p3 = new Person("ta",22);
- hs.add(p1);
- hs.add(p2);
- hs.add(p3);
- System.out.println(hs.size());//输出是3
- p1.age = 24;
- hs.remove(p1);
- System.out.println(hs.size());//输出的还是3。p1没有被删掉
- }
- }
- class Person
- {
- String name;
- int age;
- Person(String name,int age)
- {
- this.name = name;
- this.age = age;
- }
- public int hashCode()
- {
- return name.hashCode()+age*12;
- }
- }
复制代码 |