A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 939676244 中级黑马   /  2013-9-16 12:13  /  2014 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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:} 勿喷啊

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

5 个回复

倒序浏览
迭代器起始是指向第一个元素的 当然不能逆向 然后遍历到最后一个 就指向最后一个这时候可以逆向

评分

参与人数 1技术分 +2 收起 理由
张智文 + 2

查看全部评分

回复 使用道具 举报
迭代器起始是指向第一个元素的 当然不能逆向; 然后遍历到最后一个 就指向最后一个这时候可以逆向
回复 使用道具 举报
迭代器起始是指向第一个元素的 当然不能逆向 然后遍历到最后一个 就指向最后一个这时候可以逆向
回复 使用道具 举报
楼上是正解,ListIterator迭代器是 Iterator的子接口。而迭代器的初始指针是默认指向集合中的第一个元素,当没有正向遍历的时候,它的指针位置一直处于集合中第一个位置,而集合中第一个元素之前没有任何元素,所以就无法逆向遍历。所以你要先用ListIterator中的hasNext()方法正向迭代到最后一个元素,在调用ListIterator中的hasPrevious()就可以逆向迭代了。
回复 使用道具 举报
对于这个问题我想数一下指针的初始位置不是在第一个元素的,而是在第一个元素之前的,当第一次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);
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马