zoukankan      html  css  js  c++  java
  • java设计模式之迭代器

    Jdk里最不缺得就是迭代器,自己写一个,加深下理解

    public class CustomList<T> implements Iterable<T> {
        private final Object[] items = new Object[20];
        private int size = 0;
    
        public void add(T t) {
            items[size] = t;
            size++;
        }
    
        public T get(int index) {
            return (T) items[index];
        }
    
        public T remove(int index) {
            if (index > size - 1 || index < 0) {
                throw new ArrayIndexOutOfBoundsException("下标越界");
            }
            T r = (T) items[index];
            for (int i = index; i < size - 1; i++) {
                items[i] = items[i + 1];
            }
            items[--size] = null;
            return r;
        }
    
        /**
         * 正向迭代
         *
         * @return
         */
        public Iterator<T> iterator() {
    
            return new Iterator<T>() {
                int index = 0;
    
                @Override
                public boolean hasNext() {
                    return index < size;
                }
    
                @Override
                public T next() {
                    return (T) items[index++];
                }
            };
        }
    
        /**
         * 反向迭代
         *
         * @return
         */
        public Iterator<T> reverseIterator() {
    
            return new Iterator<T>() {
                int index = size - 1;
    
                @Override
                public boolean hasNext() {
                    return index >= 0;
                }
    
                @Override
                public T next() {
                    return (T) items[index--];
                }
            };
        }
    
        @Override
        public String toString() {
            return "CustomList{" +
                    "items=" + Arrays.toString(items) +
                    ", size=" + size +
                    '}';
        }
    
        public static void main(String[] args) {
            CustomList<Integer> list = new CustomList<>();
            for (int i = 0; i < 10; i++) {
                list.add(i);
            }
            Iterator<Integer> iterator = list.iterator();
            while (iterator.hasNext()) {
                System.out.print(iterator.next() + ",");
            }
    
            System.out.println();
    
            Iterator<Integer> reverseIterator = list.reverseIterator();
            while (reverseIterator.hasNext()) {
                System.out.print(reverseIterator.next() + ",");
            }
            
        }
        
    }
  • 相关阅读:
    链接错误error LNK2005可能原因之一
    ACCESS一些特殊数据类型
    flex&bison学习笔记(2)
    经典小故事
    spoj 2939 Query on a tree V 动态树分治
    spoj 913 Query on a tree II 倍增
    CEOI 2004 sweets 容斥原理
    poj 1741 Tree 树的分治
    zjoi 2007 hide 捉迷藏 动态树分治
    spoj 2798 Query on a tree again! 树链剖分
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15162832.html
Copyright © 2011-2022 走看看