黑马程序员技术交流社区

标题: 迭代器iterator和listitertor之间 [打印本页]

作者: 939676244    时间: 2013-9-16 12:13
标题: 迭代器iterator和listitertor之间
本帖最后由 939676244 于 2013-9-16 15:41 编辑

是否用iterator正向遍历完了才能用Listiterator逆向遍历?直接怎么用


import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class Test1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ArrayList al = new ArrayList();
                al.add("1");
                al.add("4");
                al.add("3");
                al.add("6");
                al.add("9");
               
               
                ListIterator it = al.listIterator();
                while(it.hasNext())
                {
                        System.out.println(it.next());
                }
                        
                while(it.hasPrevious())
                {

                        System.out.println(it.previous());

                }

        }

}‘
还有就是不打印正向遍历的结果就无法正逆向遍历 。这是什么情况
新手  {:soso_e110:} 勿喷啊


作者: 马华    时间: 2013-9-16 13:04
迭代器起始是指向第一个元素的 当然不能逆向 然后遍历到最后一个 就指向最后一个这时候可以逆向
作者: 马华    时间: 2013-9-16 13:05
迭代器起始是指向第一个元素的 当然不能逆向; 然后遍历到最后一个 就指向最后一个这时候可以逆向
作者: 马华    时间: 2013-9-16 13:05
迭代器起始是指向第一个元素的 当然不能逆向 然后遍历到最后一个 就指向最后一个这时候可以逆向
作者: 天地有我    时间: 2013-9-16 14:49
楼上是正解,ListIterator迭代器是 Iterator的子接口。而迭代器的初始指针是默认指向集合中的第一个元素,当没有正向遍历的时候,它的指针位置一直处于集合中第一个位置,而集合中第一个元素之前没有任何元素,所以就无法逆向遍历。所以你要先用ListIterator中的hasNext()方法正向迭代到最后一个元素,在调用ListIterator中的hasPrevious()就可以逆向迭代了。
作者: 王广亚    时间: 2013-9-16 15:45
对于这个问题我想数一下指针的初始位置不是在第一个元素的,而是在第一个元素之前的,当第一次hasNext时才指向第一个元素,并next()获取该元素;当指针在最后一个元素上时,hasNext指针指向最后一个元素的后面一个位置,判断是否还有元素,这是是没有的所以就不执行for循环中的next了。如果按楼上所说指针初始在第一个元素上的话,那么当指针走到最后一个元素位置时,用hasNext判断后面还有么有元素,当然是没有的,那么他就不执行现在指针所在位置上的next了吗?也就是说最后一个元素不会被读出来了?所以说,初始指针应该是在第一个元素的前一个位置的。
同样的道理,当遍历完集合后hasNext判断会使指针位置在最后一个元素的后一个位置,然后呢你用hasPrevious()是指针向前移动一个位置到最后一个元素上,因为hasPrevious()返回的结果是true所以previous()才会把当前指针所在位置上的元素读出来。
for(ListIterator lit=al.listIterator();lit.hasNext();){
    Object obj=lit.next();
      System.out.println(obj);
}





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