黑马程序员技术交流社区
标题:
集合里的一个小问题
[打印本页]
作者:
乔九
时间:
2013-2-22 14:41
标题:
集合里的一个小问题
package com.itheima;
import java.util.*;
public class Demo {
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
Iterator it=al.iterator();
while(it.hasNext())
{
Object obj=it.next();
if(obj.equals("java02"))
it.remove();
System.out.println("al="+obj);//
为何这里的java02还能被打印?????????????
}
System.out.println(al);
到这里被删掉了?????
作者:
胥文
时间:
2013-2-22 15:00
System.out.println("al="+obj);//为何这里的java02还能被打印?????????????
答:这里是从由于上面的it.remove()是从集合中移除了,但是在内存中obj还是指向java02,而我们打印的是Obj所以能看到obj=java02
而下面的集合中就里说当然的没有java02了
作者:
夏振博
时间:
2013-2-22 15:01
while (it.hasNext()) {
Object obj = it.next();//得到元素并赋给obj引用
if (obj.equals("java02"))
it.remove();
System.out.println("al=" + obj);//这里你打的不是集合了,是已经给赋值的obj引用
System.out.println(al);//把这句放到循环里可以看的更明白
}
复制代码
作者:
贾文泽
时间:
2013-2-22 15:15
//package com.itheima;
import java.util.*;
public class text {
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
Iterator it=al.iterator();
while(it.hasNext())
{
Object obj=it.next(); //取出集合a1中的元素赋给 obj
if(obj.equals("java02"))
it.remove(); //移除集合a1中等于java02的元素
System.out.println("al="+obj);// 这里打印的是obj自然是打印所有的元素了
}
System.out.println(al);//这里打印集合a1,所有没有java02
}
}
复制代码
作者:
Gaara
时间:
2013-2-22 15:18
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");//这些是在给集合添加元素
迭代中Object obj=it.next(); 是在把这些元素给obj对象引用
System.out.println("al="+obj);//这条语句不在判断中,它的意思是打印obj对象
JVM运行时是赋给obj一个打印一个 其实当执行if(obj.equals("java02")){it.remove();}时已经删除了java02;
但已经赋给了obj,然后你打印obj当然就有java02了
你可以把System.out.println("al="+obj);改成System.out.println("al="+al);就会明白了
最后一句打印的就是结果了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2