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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


今天碰到了个问题,折腾了我老半天,倒叙迭代时,一定要记得先把光标移至最后,再previous()

public static void main(String[] args){
                Scanner scan ;               
                List<String> list = new ArrayList<String>();
                while(true){
                        scan=new Scanner(System.in);
                        String str=scan.nextLine();
                        if("end".equals(str)){
                                break;
                        }
                        list.add(str);       
                }
                System.out.println(list);
                printStr(list);
                scan.close();               
        }

        private static void printStr(List<String> list) {
                ListIterator<String> li  =        list.listIterator();
                       
                StringBuffer sbuf= new StringBuffer();
                //光标必须要先移到最后
                while(li.hasNext()){
                        li.next();
                }

                System.out.println("倒叙打印输出:");
                while(li.hasPrevious()){
                        sbuf.append(li.previous());
                }
                System.out.println(sbuf.toString());
        }

评分

参与人数 1黑马币 +3 收起 理由
asdf344180788 + 3 赞一个!我恰好也不知道这个

查看全部评分

5 个回复

倒序浏览
不充一下 ,这是题目:编写程序,循环接收用户从键盘输入多个字符串,直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。
想练习的可以拿着去练练
回复 使用道具 举报
确实,使用List集合的listIterator()方法创建出来的迭代器对象是没办法一上来就倒序遍历的,前几天准备面试的时候也注意到了。
  1. package exer.psr.list;

  2. import java.util.ArrayList;
  3. import java.util.ListIterator;

  4. /**
  5. * 关于用列表迭代器ListIterator进行逆向遍历的一个小知识点:
  6. * 使用List集合直接创建的ListIterator对象是不能上来就用逆向遍历的,即hasPrevious()为假。
  7. * 可以认为ListIterator内部封装了一个指针,初始位置是0,此时是没有前一个元素的。
  8. * 如果用这个ListIterator对象正向遍历一遍之后,指针指到最后一个位置,就能进行逆向遍历了。
  9. *
  10. * @author Administrator
  11. *
  12. */
  13. public class ListIteratorTest {

  14.         public static void main(String[] args) {
  15.                 ArrayList<String> al = new ArrayList<>();
  16.                 al.add("we");
  17.                 al.add("qa");
  18.                 al.add("zxr");
  19.                 al.add("jhg");
  20.                 al.add("tgb");

  21.                 for (ListIterator<String> lit = al.listIterator(); lit.hasNext();) {
  22.                         String str = lit.next();
  23.                         System.out.println(str);
  24.                 }

  25.                 // 这个循环没有运行
  26.                 for (ListIterator<String> lit = al.listIterator(); lit.hasPrevious();) {
  27.                         String str = lit.previous();
  28.                         System.out.println(str);
  29.                 }

  30.                 ListIterator<String> lit1 = al.listIterator();

  31.                 while (lit1.hasNext()) {
  32.                         String str = lit1.next();
  33.                         System.out.println(str);
  34.                 }

  35.                 while (lit1.hasPrevious()) {
  36.                         String str = lit1.previous();
  37.                         System.out.println(str);
  38.                 }
  39.         }

  40. }
复制代码
回复 使用道具 举报
必须先正序再倒叙
回复 使用道具 举报
我一直以为直接调用previous()就可以了呢。谢谢楼主分享
回复 使用道具 举报
来学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马