java倒序输出List

先贴代码

package com.tsubasa.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

public class ReversibleArrayList<T> extends ArrayList<T>{

    public ReversibleArrayList(Collection<T> c){
        super(c) ;
    }

    public Iterable<T> reversed(){
        return new Iterable<T>(){
            @Override
            public Iterator<T> iterator() {
                return new Iterator<T>(){
                    int current = size() -1 ;
                    @Override
                    public boolean hasNext() {
                       return current > -1 ;
                    }
                    @Override
                    public T next() {
                        return get(current--);
                    }
                    @Override
                    public void remove() {
                        throw new UnsupportedOperationException() ;
                    }
                } ;
            }
            
        } ;
    }
    
    public static void main(String[] args) {
        ReversibleArrayList<String> list = 
                new ReversibleArrayList<String>(
                        Arrays.asList("to be or not to be it is a question".split(" "))) ;
        
        for(String str : list){
            System.out.print(str + " ");
        }
        System.out.println();
        for(String str :list.reversed()){
            System.out.print(str + " ");
        }
    }
}

运行结果:

to be or not to be it is a question
question a is it be to not or be to

上面这种解决方案使用了所谓的适配器方法适配器部分来自于设计模式,因为我们这里使用foreach遍历list,所以我们必须提供满足foreach的接口。

因为我们的ArrayList已经实现了Iterable接口,所以下面有两个选择来实现倒序输出:

1.覆盖ArrayList原有的iterator方法

2.自己在生产一个iterator接口。

通过上面的代码,显然这里我们选择了第二种方法。

博客新地址www.zqlite.com
原文地址:https://www.cnblogs.com/zqlxtt/p/4423231.html