当然存在内存泄漏咯。。
那个小列子说说
Collection collections = new HashSet();
Person p1 = new Person (3,3);
Person p2 = new Person (5,5);
Person p3 = new Person (3,3);
collections.add(p1);
collections.add(p2);
collections.add(p3);
collections.add(p1);
p1.id = 7;
collections.remove(p1);
System.out.println(collections.size());
输出 2
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段。否则,对象修改后的哈希值就会改变在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,也无法单独删除当前对象,从而造成内存溢出。
[ 本帖最后由 廖乃波 于 2011-07-17 11:14 编辑 ] |