黑马程序员技术交流社区
标题:
列表迭代器不出结果!谁能解释解释???
[打印本页]
作者:
张学永
时间:
2012-11-24 22:38
标题:
列表迭代器不出结果!谁能解释解释???
本帖最后由 张学永 于 2012-11-24 23:03 编辑
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("你");
al.add("好");
al.add("哈");
ListIterator<String> it = al.listIterator();
while(it.hasPrevious()){
String s = it.previous();
System.out.println(s);
}
}
复制代码
这段代码,没有结果。为什么???而换成it.next()和it.hasNext()就有结果。
我自己测试过,如果直接打印it.previous()会报告NoSuchElementException
求解释,为什么会出此异常???不是逆向迭代么???
作者:
蔡汉康
时间:
2012-11-24 22:55
因为迭代开始的时候,要看指针的位置
↓指针的位置
你 好 哈
但是previous()是返回列表中的前一个元素。
而"你"前面是没有元素的所以会报告NoSuchElementException
作者:
张学永
时间:
2012-11-24 22:56
蔡汉康 发表于 2012-11-24 22:55
因为迭代开始的时候,要看指针的位置
↓指针的位置
你 好 哈
为什么呢?指针最开始不应该是在最后面么?逆向迭代的初始位置为什么在最前面呢?
作者:
种生祥
时间:
2012-11-24 23:07
it.hasPrevious();//第一个前面没有元素,条件不成立,就不打印喽
作者:
赵红萍
时间:
2012-11-24 23:14
对于ArrayList列表,当你加完第一个字符后,指针会自动指向下一个,等所有的元素都加完后,指针就又回到第一个元素上了,所以要向下找,如果是LinkedList列表,它的底层是链表的结构,你就可以自己指定,指针的指向位置,就可以用previous()方法,向前读取了
作者:
潘天功
时间:
2012-11-24 23:14
这个真没遇到过,以前老师讲的都是这样的:
Iterator<String> it = al.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
而且,你所用的迭代器是List自己所特有的我们一般都用Iterator
作者:
潘天功
时间:
2012-11-25 11:44
ListIterator操作时可以进行双向迭代。
使用ListIterator接口中的hasPrevious()方法由后向前判断,并使用Previous()方法取出前一个元素
进行双向迭代代码如下:
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("你");
al.add("好");
al.add("哈");
ListIterator<String> it = al.listIterator();
System.out.println("由前向后输出:");
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
System.out.println("由后向前输出:");
while(it.hasPrevious()){
String s = it.previous();
System.out.println(s);
}
}
由后向前输出时必须先由前向后输出,也就是说在使用ListIterator接口进行双向输出时,
如果想完成由后向前的输出,一定要先由前向后输出。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2