今天突然复习到集合了,然后使用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());
}
}
}

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

例子
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);
}
}
}

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

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