美文网首页
迭代器与foreach

迭代器与foreach

作者: sjandroid | 来源:发表于2018-07-23 15:05 被阅读0次

对于“foreach”增强型for循环和集合框架中的“Iterator”想必都不会陌生,今天记录一下关于“迭代器”与“foreach”之间的一些关系。
目录:

  • 使用
  • 原因&原理
  • 应用

使用

使用foreach遍历容器数据的话,只需要写几行代码就ok了

    private static void test_2(){
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");

        for(String str : list){
            System.out.println(str);
        }
    }

不知道大家有没有想过,为什么foreach除了可以遍历数组外还可以遍历容器类中的数据元素呢?
接下来就介绍下原因与原理。


原因&原理

  • 原因:从jdk1.5开始引入了 Iterable接口,该接口被foreach用来在序列中移动遍历数据。
  • 原理:Iterable接口内部只有一个“iterator()”,该方法会返回一个“Iterator”。foreach实质上正是利用Iterator来达到遍历数据元素 的目的。

之所以foreach可以遍历jdk中定义的容器类中的数据是因为这些系统类都实现了Iterable接口。我们来看下集合框架中顶层接口Collection的实现。

image.png

原理知道之后,我们来看看如何应用“Iterable,Iterator”通过foreach循环来遍历自定义容器类中的数据吧。


应用

private static void test_1(){
        Test<String> test = new Test<>(new String[]{"Hello", "World", "!"});

        for(String str : test){
            System.out.println(str);
        }
    }

    /**
     * 具体的Iterable实现类
     */
    private static class Test<T> implements Iterable<T>{
        private T[] array;

        public Test(T[] array) {
            this.array = array;
        }

        @Override
        public Iterator<T> iterator() {
            return new TestIterator<>(array);
        }

        /**
         * 自定义迭代器
         */
        private static class TestIterator<E> implements Iterator<E>{

            private E[] array;
            private int index;

            public TestIterator(E[] array) {
                this.array = array;
            }

            @Override
            public boolean hasNext() {
                return this.index < this.array.length;
            }

            @Override
            public E next() {
                return this.array[this.index++];
            }
        }
    }

log

Hello
World
!

参考:

《Java编程思想》

相关文章

  • 迭代器与foreach

    对于“foreach”增强型for循环和集合框架中的“Iterator”想必都不会陌生,今天记录一下关于“迭代器”...

  • foreach与迭代器

    foreach语法主要用于数组,但是它也可以应用于任何Collection对象。如下: 因为cs是一个Collec...

  • 迭代器模式

    内部迭代器和外部迭代器 简单地讲,内部迭代器就是类似 forEach 的迭代器,其内部迭代逻辑已经制定好,只要传入...

  • Java 几种循环方式

    1、java循环分类 Iterator、for、foreach、Stream.forEach 2、java迭代器I...

  • 2022-05-12

    foreach语法foreach语法用于: 数组(chapter16) 容器 (chapter17) 迭代器 It...

  • 数组(Array)<迭代器>

    一、Js数组迭代器方法 主要介绍js数组中的forEach,every,some,filter,map迭代器方法 ...

  • java中循环的几种方式

    一、for 二、forEach 三、迭代器 For Each的效率差,用迭代器的效率也没有很好。for循环最优,因...

  • js设计模式:迭代器

    1.内部迭代器模式 简单的来说就是forEach的实现 2.外部迭代器 用next迭代直到完成,通常由next, ...

  • foreach遍历ArrayList和数组

    遍历ArrayList的方式有迭代器,foreach循环,get(i)等方式。其中迭代器和get方法都有具体的代码...

  • LinkedList,ArrayList 遍历效率

    LinkedList,ArrayList 遍历效率, 分别使用迭代器Iterator,foreach,for方式进...

网友评论

      本文标题:迭代器与foreach

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