本帖最后由 黄玉昆 于 2013-2-24 13:24 编辑
毕老师在说关于HashSet的删除问题的时候,说到新对象会先和集合中的对象比较,然后再移除,我想知道的是,集合中如果有这个对象,会被移除,那么这个新对象会不会也不存在呢?或者说在堆内存中是如何操作的呢?- hs.add(new Person("a2",12));
- hs.add(new Person("a3",13));//原
- hs.remove(new Person("a3",13));//新
复制代码 下面是我自己画的一个图:
步骤如下:
①在堆内存中创建("a3",13)这个对象,开辟空间
②分配地址值,计算哈希值0x37ab
③将这个新的a3对象与原有的a3对象的哈希值比较,相同,再用equals比较是否相同,相同。
④将集合中的哈希值0x37ab删除。
⑤这一步还有吗?会将a3这两个对象都删除吗?我知道这两个对象没用后会在某一时刻被回收,但是在remove方法执行中或执行后会有相应的删除这两个对象的操作码?
|
|