A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何超 中级黑马   /  2013-11-11 12:40  /  934 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何超 于 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我怎么想也想不通 ···

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

4 个回复

倒序浏览
因为obj在remove()之前已经赋值了,打印出来肯定是123,如果你sop(a.indexOf("2")返回为-1,说明已经删除
回复 使用道具 举报
你可以理解成:
虽然 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:10
板凳
本帖最后由 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,但已经分离出来了!

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马