java实现逆序迭代

今天突然复习到集合了,然后使用Comparable实现了一个子类,然而在对子类集合进行排序的时候,由于要根据某个规则分别正序、逆序输出该集合中的子类元素,但是迭代输出的时候发现一个问题,就是怎么用java实现逆序迭代呢?

注意:本文只提供使用迭代器遍历输出方法,普通for循环在某些时候也可以正反迭代集合,
但是有些集合无法用下标获取元素,望悉知

第一种

实现思想:
使用ListIterator

使用该接口中的hasNext()方法以及next()方法组合可以进行正序迭代
该接口中的hasPrevious()方法以及previous()方法组合可以进行逆序迭代

例子

package com.blog.iterator;

import java.util.ArrayList;
import java.util.ListIterator;

/**
 * @Author jinhuan
 * @Date 2022/4/5 8:56
 * Description:
 */
public class Test01 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("123");
        list.add("124");
        list.add("125");
        list.add("126");
        list.add("127");
        list.add("128");

        //正序迭代
        ListIterator<String> iterator = list.listIterator();
        System.out.println("正序迭代:");
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

        //逆序迭代
        System.out.println("反向迭代:");
        while (iterator.hasPrevious()){
            System.out.println(iterator.previous());
        }
    }
}

image-20220405090136808

第二种

ListIterator接口也不是万能的,Set以及Map都没有实现该接口,那么有没有一种方法可以针对所有的集合通用呢?我相信兄弟们一看答案瞬间就明了了,那就是:

递归

image-20220405090405226

例子

package com.blog.iterator;

import com.jinhuan.chapter04.no4_4.java_10301002.test03.ComparableStudent;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

/**
 * @Author jinhuan
 * @Date 2022/4/5 9:05
 * Description:
 */
public class Test02 {
    public static void main(String[] args) {
        TreeSet<String> list = new TreeSet<>();
        list.add("123");
        list.add("124");
        list.add("125");
        list.add("126");
        list.add("127");
        list.add("128");


        Iterator<String> iterator = list.iterator();
        System.out.println("使用TreeSet进行正序迭代:");
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

        System.out.println("使用TreeSet进行反向迭代:");
        //注意,由于这个迭代器对象已经使用过,此时的“指针”已经指向最后一个元素,所以逆序迭代时,要重新获取
        //Iterator<String> iterator = list.iterator();
        method(list.iterator());

    }

    /**
     * 自定义逆序输出
     *
     */
    private static void method(Iterator iterator) {
        if (iterator.hasNext()){
            //注意此处根据需要修改或者使用反射
            String s = (String) iterator.next();
            method(iterator);
            System.out.println(s);
        }
    }
}

image-20220405091745900

以上均为本人个人观点,借此分享。如有不慎之处,劳请各位批评指正!鄙人将不胜感激并在第一时间进行修改!

最后:

image-20220327095755218


版权声明:本文为m0_51724241原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。