美文网首页
java 使用迭代器 Iterator

java 使用迭代器 Iterator

作者: MikeShine | 来源:发表于2022-01-07 14:11 被阅读0次

    1. 写在前面

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


    2. 一个case

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

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

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

    • 实现 Iterable 接口,该接口返回一个 Iterator 对象
    • 返回的 Iterator 对象需要知道如何遍历元素

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

    /**
         * 自己编写的一个集合类
         * 为了支持 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;
                }
    
    
    
            }
    

    相关文章

      网友评论

          本文标题:java 使用迭代器 Iterator

          本文链接:https://www.haomeiwen.com/subject/evlrcrtx.html