黑马程序员技术交流社区
标题:
高人来帮我分析一下这个list迭代器程序的内存是怎么变化...
[打印本页]
作者:
王溢君
时间:
2013-1-15 21:36
标题:
高人来帮我分析一下这个list迭代器程序的内存是怎么变化...
import java.util.*;
class ListDemo2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
//添加元素
al.add("java01");
al.add("java02");
al.add("java03");
sop(al);
ListIterator li = al.listIterator();
while(li.hasNext())
{
Object obj = li.next();
if(obj.equals("java02"))
li.remove();
sop("obj="+obj);//这个为什么移除了还打印所有?
//object指向02,
//remove移除了元素的引用,元素还在内存当中。
//元素还被object使用,所以被打印。
}
sop("al="+al);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
帮忙分析一下内存。。。谢谢。
作者:
王溢君
时间:
2013-1-15 22:46
晕倒,没有人来帮忙吗?
作者:
刘郑瑞
时间:
2013-1-15 22:58
List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行sop("obj="+obj),刚刚移过来的元素没有被读取,则List读的还是内存中将要移走的值。
23. li.remove();
25. sop("obj="+obj);//这个为什么移除了还打印所有?
26. //object指向02,
27. //remove移除了元素的引用,元素还在内存当中。
28. //元素还被object使用,所以被打印。
29. }
作者:
jonn
时间:
2013-1-15 23:20
本帖最后由 冯海霞 于 2013-1-16 11:01 编辑
详细画了一个图,画了很乱,还望谅解,LZ应该很容易理解了
未命名.jpg
(769.55 KB, 下载次数: 31)
下载附件
2013-1-15 23:20 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2