list正向输出字符串有三种方式,分别是:

  •   迭代器:集合特有的遍历方式
  •   普通for:带有索引的遍历方式
  •   增强for:最方便的遍历方式

思考:

做一道list反向输出字符串练习题时我就在想能不能也用不同的方式输出呢?

说干就干,我首先想到的是迭代器ListIterator遍历方法配合hasPrevious以及previous完成反向输出;

//E previous():返回列表中的上一个元素

//boolean hasPrevious():如果此列表迭代器在相反向遍历列表时具有更多元素,则返回true

其次是for循环反向遍历;

最后reverse反向输出,刚好三种方法,可以和正向输出对应上。

遇到的问题及解决方法:

但是编写运行时ListIterator反向遍历始终无法输出,通过查阅资料发现之前也有前辈遇到同样的问题,但在编写程序时发现listIterator.hasPrevious()居然是判假,原来列表迭代器遍历时默认指针在最左侧,所以要想使用列表迭代器反向遍历首先要正向遍历把指针指到最右侧。才能使listIterator.hasPrevious()为真,也就是说反向遍历前必须正向遍历一次

感谢大佬的分享!http://t.csdn.cn/2gC4f

题干:

写一个方法reverseList,该函数能够接受一个List,然后把该List 倒序排列。 
(reverse逆转)
     例如:
  List list = new ArrayList(); 

  list.add(“Hello”); 

  list.add(“World”); 

  list.add(“Learn”); //此时list 为Hello World Learn 

  reverseList(list); //调用reverseList 方法之后,list 为Learn World Hello

for循环反向遍历输出时,发现输出的数组是依次输出,后来发现是打印语句写在循环里,只要把打印语句写在循环外就ok了:

改进前:

--------------
[游浩贤]
[游浩贤, 喜欢]
[游浩贤, 喜欢, 霍琊]
(方法二:for方法反向遍历)
--------------

 改进后:

--------------
[游浩贤, 喜欢, 霍琊]
(方法二:for方法反向遍历)
--------------

 reverse函数功能是逆序(或反转),多用于字符串、数组、容器。

//新建一个列表list2
List<String> list2 = new ArrayList<String>();
        //添加内容
        list2.add("霍琊");
        list2.add("喜欢");
        list2.add("游浩贤");
        //reverse函数逆序反转
        Collections.reverse(list2);
//reverse函数逆序反转
        ListIterator<String> lists = list2.iterator();
        Iterator<String> lists = list2.iterator();
        while (lists.hasNext()){
            String s = lists.next();
            System.out.println(s);
        }

完整代码:

package com.B.Container_13.CollectionAndList.Practice;

import java.util.*;

/*写一个方法reverseList,该函数能够接受一个List,然后把该List 倒序排列。
(reverse逆转)
     例如:
  List list = new ArrayList();
  list.add(“Hello”);
  list.add(“World”);
  list.add(“Learn”); //此时list 为Hello World Learn
  reverseList(list); //调用reverseList 方法之后,list 为Learn World Hello*/
public class Reverse {
    public static void main(String[] args) {
//创建对象
        List<String> list = new ArrayList<String>();
//添加元素
        list.add("霍琊");
        list.add("喜欢");
        list.add("游浩贤");

//方法一:迭代器的的使用
        ListIterator<String> lt = list.listIterator();
        while (lt.hasNext()) {
            String s = lt.next();
            System.out.println(s);
        }
        System.out.println("(方法一:迭代器的的使用)");
        System.out.println("--------------");
//方法二:普通for的使用
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }
        System.out.println("(方法二:普通for的使用)");
        System.out.println("--------------");
//方法三:增强for的使用
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("(方法三:增强for的使用)");
        System.out.println("--------------");

//调用方法reverseList
        reverseList(list);
    }


    //写一个reverseList方法,逆转输出
    public static void reverseList(List<String> list) {
//方法一:迭代器的反向输出
        ListIterator<String> lt = list.listIterator();
        //将指针向左移到右的操作
        while(lt.hasNext()){
            String s = lt.next();
        }
        //反向遍历
        while (lt.hasPrevious()){
            String s = lt.previous();
            System.out.println(s);
        }
        System.out.println("(方法一:迭代器的反向输出)");
        System.out.println("--------------");


//方法二:for方法反向遍历
        List<String> list1 = new ArrayList<String>();
        //新建一个list1,把之前的list倒序存入
        for (int i = list.size() - 1; i >= 0; i--) {
            list1.add(list.get(i));
        }
        System.out.println(list1);
        System.out.println("(方法二:for方法反向遍历)");
        System.out.println("--------------");

//方法三:存入数组 reverse输出
//reverse函数功能是逆序(或反转),多用于字符串、数组、容器
        //新建一个列表list2
        List<String> list2 = new ArrayList<String>();
        //添加内容
        list2.add("霍琊");
        list2.add("喜欢");
        list2.add("游浩贤");
        //reverse函数逆序反转
        Collections.reverse(list2);
//        迭代器输出
//        ListIterator<String> lists = list2.iterator();
        Iterator<String> lists = list2.iterator();
        while (lists.hasNext()){
            String s = lists.next();
            System.out.println(s);
        }
        System.out.println("(方法三:存入数组 reverse输出)");


    }
}

输出结果:

霍琊
喜欢
游浩贤
(方法一:迭代器的的使用)
--------------
霍琊
喜欢
游浩贤
(方法二:普通for的使用)
--------------
霍琊
喜欢
游浩贤
(方法三:增强for的使用)
--------------
游浩贤
喜欢
霍琊
(方法一:迭代器的反向输出)
--------------
[游浩贤, 喜欢, 霍琊]
(方法二:for方法反向遍历)
--------------
游浩贤
喜欢
霍琊
(方法三:存入数组 reverse输出)

进程已结束,退出代码 0

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐