黑马程序员技术交流社区

标题: 高人来帮我分析一下这个list迭代器程序的内存是怎么变化... [打印本页]

作者: 王溢君    时间: 2013-1-15 21:36
标题: 高人来帮我分析一下这个list迭代器程序的内存是怎么变化...
  1. import java.util.*;

  2. class  ListDemo2
  3. {     
  4.         public static void main(String[] args)
  5.         {
  6.                 ArrayList al = new ArrayList();
  7.                 //添加元素
  8.                 al.add("java01");
  9.                 al.add("java02");
  10.                 al.add("java03");

  11.          sop(al);

  12.                 ListIterator li = al.listIterator();

  13.                 while(li.hasNext())
  14.                 {
  15.                         Object obj = li.next();

  16.                         if(obj.equals("java02"))
  17.                                
  18.                                 li.remove();

  19.                                 sop("obj="+obj);//这个为什么移除了还打印所有?
  20.                                                                 //object指向02,
  21.                                                                 //remove移除了元素的引用,元素还在内存当中。
  22.                                                                 //元素还被object使用,所以被打印。
  23.                 }
  24.                         sop("al="+al);
  25.         }

  26.                 public static void sop(Object obj)
  27.                 {
  28.                         System.out.println(obj);
  29.                 }

  30. }

复制代码
帮忙分析一下内存。。。谢谢。


作者: 王溢君    时间: 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应该很容易理解了








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2