zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    CF1093F Vasya and Array
    CF1093D Beautiful Graph
    mysql主主同步
    mysql主从机制的部署与应用
    什么是多项式?
    从线性逼近到多项式逼近:泰勒级数
    机器学习--boosting家族之XGBoost算法
    倾情大奉送--Spark入门实战系列
    [机器学习笔记] 什么是分类,什么是回归?
    kafka中处理超大消息的一些考虑
  • 原文地址:https://www.cnblogs.com/zqlxtt/p/4423231.html
Copyright © 2011-2022 走看看