java 使用迭代器 Iterator

2022-01-07  本文已影响0人  MikeShine

1. 写在前面

迭代器 Iterator 平时使用的场景很少。我们这次学习一下 Iterator 这个东西。


2. 一个case

在使用集合的时候,经常会使用 for each 来对集合进行遍历。
而事实上,这个 for each 的遍历是通过 Iterator 来实现的,编译器将 for each 的写法改写成为了普通的 for 循环。

for(Iterator<String> it = list.iterator; it.hasNext; ){
     // 代码逻辑
      }

因此,对任何一个集合类来说,如果想要通过 for each 来遍历其中的元素,都需要满足如下2个条件:

下面我们搞一个 反序遍历的 集合类

/**
     * 自己编写的一个集合类
     * 为了支持 for each 因此需要满足2个点:
     *    - 集合类实现 Iterable 接口,该接口要求返回一个 Iterator 对象
     *    - 用 Iterator 对象迭代结合内部数据 (这个返回的 Iterator 对象需要知道如何遍历)
     * @param
     */
    static class ReverseList<T> implements Iterable<T> {

        List<T> list = new ArrayList<>();

        public void add(T t){
            list.add(t);
        }


        @Override
        public Iterator<T> iterator() {
            // 这里需要返回一直知道如何遍历集合的 Iterator
            return new ReverseIterator(list.size());
        }

        /**
         * 内部类实现一个 Iterator
         */
        class ReverseIterator implements Iterator{

            int index;

            ReverseIterator(int index){
                this.index = index;
            }

            @Override
            public Object next() {
                index--;
                return ReverseList.this.list.get(index);
            }

            @Override
            public boolean hasNext() {
                return index>0;
            }



        }
上一篇 下一篇

猜你喜欢

热点阅读