黑马程序员技术交流社区
标题:
集合框架,迭代器问题?
[打印本页]
作者:
黑马杨晨
时间:
2012-9-19 13:30
标题:
集合框架,迭代器问题?
本帖最后由 黑马杨晨 于 2012-9-23 14:03 编辑
import java.util.*;
class ListDemo
{
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"))
{
al.remove("java01"); //移除元素,这句好像有问题?
// al.add("java008");
}
System.out.println("obj="+obj);
}
}
}
红色代码不对吗?
结果为什么是这样呢?
QQ截图20120919132926.jpg
(21.39 KB, 下载次数: 31)
下载附件
2012-9-19 13:30 上传
作者:
陈俊来
时间:
2012-9-19 14:05
很简单,
// 在迭代过程中,准备添加或者删除元素。
Iterator it = al.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (obj.equals("java02")) {
al.remove("java01"); // 移除元素,这句好像有问题?
//al.add("add");
}
System.out.println("obj=" + obj);
}
一开始,al里面有3个对象,
while循环打印了第一个对象java01,也就是obj=java01
当到第二个对象java02的时候移除了java01,然后打印了第二个对象java02,也就是obj=java02,这时候al里面就只有2个对象了,所以while(id.hasNext())就不往下执行了,
最后就只打印出了
obj=java01
obj=java02
作者:
董志超
时间:
2012-9-19 14:26
import java.util.*;
class ListDemo
{
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();
it.remove();// 从迭代器指向的collection中移除迭代器返回的最后一个元素
sop(al);
}
}
public static void sop(Object obj)
{
System.out.println("obj="+obj);
}
}
//运行一下吧
作者:
赵永康
时间:
2012-9-19 15:39
ArrayList的迭代器是不支持删除、增加动作的。因为是他结构是数组结构的。只有查找很方便、快捷的!
你把集合改成LinkList试试就可以了,他有自己的自身迭代器listIterator 你用这个迭代器就可以支持删除 增加之类的啦
作者:
王自强
时间:
2012-9-19 15:59
import java.util.*;
class ListDemo
{
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"))
{
al.remove("java01"); //这句执行后,集合中只有两个元素了,再判断while(it.hasNext()),结果为false了,就退出循环了。
// al.add("java008");
}
System.out.println("obj="+obj);//第二次打印的obj记录的是java02,会打印出来的
}
}
}
al中记录的是在while循环前的集合中的值,最好不要在迭代过程中使用集合对象的增删方法,会发生逻辑错误,在迭代过程中要使用迭代器的增删方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2