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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李志广 中级黑马   /  2012-7-13 15:12  /  1458 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 007lzg 于 2012-7-13 15:56 编辑

import java.util.*;
class ListDemo
{    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void main(String[] args)
    {
        ArrayList al=new ArrayList();
        al.add("java01");
        al.add("java02");
        al.add("java03");
        Iterator it=al.iterator();
        while(it.hasNext())
            {
            Object obj=it.next();
            if(obj.equals("java02"))
                it.remove();
            sop("obj="+obj);
            }
            sop(al);
    }
}
在上面的语句中it.remove();不是已经把java02给删除了吗?为什么 在sop("obj="+obj);还会有java02呢?

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

7 个回复

正序浏览
这问题也给技术分,我不服。{:soso_e115:}

点评

这期的版主们貌似很照顾新人,看到发贴的基本都加分了。  发表于 2012-7-13 22:48
回复 使用道具 举报
呵呵,谢谢你们的讲解!!!{:soso_e142:}
回复 使用道具 举报
集合中就没有元素的实例对象,存的都是这些对象的引用,而引用说白了就是这些对象在内存中的地址而已。
         Object obj=it.next();   //这个时候把"java02"赋给obj 了;
                 if(obj.equais("java02"))
                         it.remove();   //这只是把存放在集合中的"java02"的地址移除了而已,但内存中还是存在"java02"这个对象的
                 System.out.println("obj="+obj);//obj引用的对象是"java02",当然就能打印出来了。

点评

嗯 ,说的很好。  发表于 2012-7-13 17:15

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
你移除的只是从集合中的移除该元素,但是obj仍然引用"java02",所以你打印obj的话 还是有该元素的。
回复 使用道具 举报
  1. while(it.hasNext())
  2.             {
  3.             Object obj=it.next(); // obj是个临时变量,暂存取到的对象
  4.             if(obj.equals("java02"))
  5.                 it.remove(); // remove操作的结果是从集合里删除了元素,但是obj保存了对象。因此遍历时仍然打印一次。
  6.             sop("obj="+obj);
  7.             }
复制代码
回复 使用道具 举报
哥们你这是属于逻辑上出现问题了,
while(it.hasNext())
            {
            Object obj=it.next();
            if(obj.equals("java02"))
                it.remove();
            sop("obj="+obj);
            }
你的移除操作和打印是没有关系的。每次读取一个next()就会打印一次。
回复 使用道具 举报
sop("obj="+obj)打印的是你遍历到的对象,和你对集合的操作无关
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马