黑马程序员技术交流社区
标题:
迭代器的问题
[打印本页]
作者:
何超
时间:
2013-11-11 12:40
标题:
迭代器的问题
本帖最后由 何超 于 2013-11-11 18:02 编辑
主要代码如下
ArrayList a=new ArrayList();
a.add("1");
a.add("2");
a.add("3");
Iterator m=(Iterator) a.iterator();
while(m.hasnext())
{
Object obj=m.next();
if(obj.equals("02"))
m.remove();
sop(obj);
}
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 编辑
public static void main(String[] args){
ArrayList a=new ArrayList();
a.add("1");
a.add("2");
a.add("3");
Iterator m=(Iterator) a.iterator();
while(m.hasNext())
{
Object obj=m.next();
if(obj.equals("2")){
System.out.println("恶灵,消除吧!!");
m.remove(); //你remocve也是move了m而不是a。m=a,但a!=m。删除成功也能a没有影响。
}
else{System.out.println("木有删除这回事 - -#");}
System.out.println(obj);
}
System.out.println(a);
}
复制代码
运行结果:
木有删除这回事 - -#
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