黑马程序员技术交流社区

标题: 遇到一个集合迭代器的问题,请高手指点 [打印本页]

作者: 傻瓜一点红    时间: 2013-6-16 15:44
标题: 遇到一个集合迭代器的问题,请高手指点
本帖最后由 傻瓜一点红 于 2013-6-16 16:07 编辑

今天看了下集合,遇到一个奇怪的问题,请高手指点,用了下迭代器的子类ListIterator,但里面的逆向遍历方法hasPrevious()和previous()有点奇怪,不能一开始就使用这个逆向遍历方法,非得先用正向遍历结束后才能使用逆向遍历,这样逆向遍历的方法才有效,按其原理也就是非得先用正向遍历使指针指向了最后才能用逆向遍历,那么这样的话就感觉有点问题了,按java设计者的思想应该是可以直接一来就可以采用逆向遍历,这样才能更有实际意义啊,例子如下:
  1. import java.util.*;
  2. class test
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 ArrayList al=new ArrayList();
  7.                 al.add("123");
  8.                 al.add("qwqe");
  9.                 al.add("abc");
  10.                 al.add("1234");
  11.                 System.out.println(al);
  12.                 ListIterator li=al.listIterator();
  13.                 /*
  14.                 while(li.hasNext())//正向遍历,
  15.                 {
  16.                         System.out.println(li.next());
  17.                 }
  18.                 */
  19.                 while(li.hasPrevious())//逆向遍历,非得先用正向遍历,逆向遍历才能打印出来
  20.                 {
  21.                         System.out.println(li.previous());
  22.                 }
  23.         }
  24. }
复制代码
上面的例子就是非得先用正向遍历,逆向遍历才能答应出来,这就有点奇怪了,请高手指点啊


作者: 傻瓜一点红    时间: 2013-6-16 16:13
尹桥印 发表于 2013-6-16 16:09
跟迭代器的下标有关系吧,初始下标就在第一个元素的位置,然后通过正向迭代,将下标向后移。
逆向迭代就是 ...

刚才找到了一个比较满意的答案,按设计者的思维模式,逆向遍历主要是给listIterator(int index)这个方法用的,在集合调用方法时就能直接把指针调整好,这对逆向遍历才变得有实际意义
作者: 傻瓜一点红    时间: 2013-6-16 16:18
尹桥印 发表于 2013-6-16 16:15
ListIterator listIterator(int index)返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始 ...

是啊,就是这个方法,之前我也没注意到这个方法,后来有个人提醒了才知道:D




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2