黑马程序员技术交流社区
标题:
菜鸟:Iterator 小问题?
[打印本页]
作者:
李志广
时间:
2012-7-13 15:12
标题:
菜鸟:Iterator 小问题?
本帖最后由 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呢?
作者:
陆强强
时间:
2012-7-13 15:16
sop("obj="+obj)打印的是你遍历到的对象,和你对集合的操作无关
作者:
吴小东
时间:
2012-7-13 15:24
哥们你这是属于逻辑上出现问题了,
while(it.hasNext())
{
Object obj=it.next();
if(obj.equals("java02"))
it.remove();
sop("obj="+obj);
}
你的移除操作和打印是没有关系的。每次读取一个next()就会打印一次。
作者:
黑马刘涛
时间:
2012-7-13 15:29
while(it.hasNext())
{
Object obj=it.next(); // obj是个临时变量,暂存取到的对象
if(obj.equals("java02"))
it.remove(); // remove操作的结果是从集合里删除了元素,但是obj保存了对象。因此遍历时仍然打印一次。
sop("obj="+obj);
}
复制代码
作者:
杨康
时间:
2012-7-13 15:34
你移除的只是从集合中的移除该元素,但是obj仍然引用"java02",所以你打印obj的话 还是有该元素的。
作者:
夏儒日
时间:
2012-7-13 15:35
集合中就没有元素的实例对象,存的都是这些对象的引用,而引用说白了就是这些对象在内存中的地址而已。
Object obj=it.next(); //这个时候把"java02"赋给obj 了;
if(obj.equais("java02"))
it.remove(); //这只是把存放在集合中的"java02"的地址移除了而已,但内存中还是存在"java02"这个对象的
System.out.println("obj="+obj);//obj引用的对象是"java02",当然就能打印出来了。
作者:
李志广
时间:
2012-7-13 15:56
呵呵,谢谢你们的讲解!!!{:soso_e142:}
作者:
王双宝
时间:
2012-7-13 16:15
这问题也给技术分,我不服。{:soso_e115:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2