黑马程序员技术交流社区

标题: 迭代器的问题 [打印本页]

作者: 何超    时间: 2013-11-11 12:40
标题: 迭代器的问题
本帖最后由 何超 于 2013-11-11 18:02 编辑

主要代码如下
  1.   ArrayList a=new ArrayList();
  2.   a.add("1");
  3.   a.add("2");
  4.   a.add("3");
  5.   Iterator m=(Iterator) a.iterator();   
  6.   while(m.hasnext())   
  7.   {  
  8.           Object obj=m.next();
  9.     if(obj.equals("02"))
  10.         m.remove();
  11.           sop(obj);
  12.   }
  13.   sop(a)
复制代码
最后结果为 sop(obj)为 123   但是 sop(a)为1 3  
毕老师说的是 虽然判断有删除  但是obj那个时候指向了02  删除的时候是把这个元素的引用从集合中移除了  但是元素还在内存当中  所以obj是123 a是13
a为13我也可以理解  !!! obj是一个引用本身既然把引用都移除了  怎么还能输出  求各位告知下原因!!! obj为123我怎么想也想不通 ···

作者: 小西。。。    时间: 2013-11-11 13:19
因为obj在remove()之前已经赋值了,打印出来肯定是123,如果你sop(a.indexOf("2")返回为-1,说明已经删除
作者: 零下五度的水    时间: 2013-11-11 13:34
你可以理解成:
虽然 ArrayList 是个对象,但它的元素:"1", "2", "3" 都是字符串常量,这些常量是存储在字符串常量池里的
你的obj=m.next(); obj.equals"2" 的时候,obj="2",这时候 ArrayList remove("2"),obj还是="2"的,
这么看那个remove就跟obj没什么关系了吧
作者: FFF    时间: 2013-11-11 13:38
本帖最后由 FFF 于 2013-11-11 13:48 编辑
  1.     public static void main(String[] args){
  2.       ArrayList a=new ArrayList();
  3.       a.add("1");
  4.       a.add("2");
  5.       a.add("3");
  6.       Iterator m=(Iterator) a.iterator();  
  7.       while(m.hasNext())  
  8.       {
  9.               Object obj=m.next();        
  10.         if(obj.equals("2")){
  11.             System.out.println("恶灵,消除吧!!");
  12.             m.remove();            //你remocve也是move了m而不是a。m=a,但a!=m。删除成功也能a没有影响。
  13.         }
  14.         else{System.out.println("木有删除这回事  - -#");}
  15.         System.out.println(obj);
  16.       }
  17.       System.out.println(a);
  18.     }
复制代码
运行结果:
木有删除这回事  - -#
1
恶灵,消除吧!!
2
木有删除这回事  - -#
3
[1, 3]


PS:a=temp,temp=obj。删除的时候,删除了a,但obj已经不属于a。虽然他还是指向a,但已经分离出来了!
作者: 黄炳期    时间: 2013-11-11 14:40
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html





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