黑马程序员技术交流社区
标题:
关于迭代器的问题
[打印本页]
作者:
谭培龙
时间:
2012-8-6 13:38
标题:
关于迭代器的问题
import java.util.*;
public class ListTest {
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
ListIterator li = al.listIterator();
while(li.hasNext())
{
Object obj = li.next();
if(obj.equals("java02"))
{
li.add("java007");
li.set("java05");
}
}
System.out.println(al);
}
}
复制代码
为什么会报错?迭代器的原理是什么?
作者:
范泰洋
时间:
2012-8-6 14:02
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
和用for来遍历数组差不多。
作者:
王程
时间:
2012-8-6 14:39
本帖最后由 王程 于 2012-8-6 14:43 编辑
ArrayList类中有set方法,完整描述是这样的set(int index, E element),返回值是ArrayList中的参数类型,根据你传入的参数看出,这里调用的是ListIterator中的set方法。
这个方法ListIterator接口的set方法在API中是这样描述的:用指定元素替换 next 或 previous 返回的最后一个元素。只有在最后一次调用 next 或 previous 后既没有调用 ListIterator.remove 也没有调用 ListIterator.add 时才可以进行该调用。
而set()方法在循环中明显不对。
你可以将 li.set(1,"java05");这句话放到循环外面来处理,如果你是想改变指定位置的元素,可以这样写al.set(1,"java05")
作者:
刘学
时间:
2012-8-6 14:42
18. li.add("java007");
19. li.set("java05");
先替换元素后添加元素就不会报错了,也就是18行和19行换下位置。
作者:
纪艺松
时间:
2012-8-6 14:45
import java.util.*;
class ListTest {
public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
ListIterator<String> li = al.listIterator();
while(li.hasNext())
{
Object obj = li.next();
if(obj.equals("java02"))
{
li.set("java05"); //可不可以理解成set在使用前整个list的状态不能发生改变;
li.add("java007");
// li.set("java05");
}
//li.set("java05");
}
System.out.println(al);
}
}
作者:
王程
时间:
2012-8-6 14:45
楼上的办法不错呀
作者:
黑马振鹏
时间:
2012-8-6 15:39
li.add("java007");
li.set("java05");
楼主的意思我不是很清楚,能解释一下否?是想想增加然后改变?还是说要改变“java02”?
作者:
谭培龙
时间:
2012-8-6 19:33
问题已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2