Java 迭代器的使用 Iterator

Java的集合类可以使用for ... each循环

  • List
  • Set
  • Queue
  • Deque

我们以List为例 其实一个java编译器并不知道如何遍历一个List

编译器只是把一个for ... each 通过Iterator改写成普通的for循环

        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        for (String str : list) {
				System.out.println(str);
        }
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) 		{
            String str = iterator.next();
            System.out.println(str);
        }

如何让自己编写的集合类使用for..each循环

  • 实现Iterable接口
  • 返回Iterator对象
  • 用Iterator对象迭代

我们自己编写一个集合类ReadOnlyList

public class IteratorTest {

    public static void main(String[] args) {
        ReadOnlyList<String> readOnlyList = new ReadOnlyList<>("a","b","c");
        for (String str : readOnlyList){
            System.out.println(str);
        }
    }
}

public class ReadOnlyList<E> implements Iterable<E> {

    E[] array;

    @SafeVarargs
    public ReadOnlyList(E... array) {
        this.array = array;

    }

    @Override
    public Iterator<E> iterator() {
        return new ReadOnlyIterator();
    }

    class ReadOnlyIterator implements Iterator<E> {

        int index = 0;

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

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

运行结果

a
b
c
posted @ 2020-11-21 15:08  吕敬瑛  阅读(353)  评论(0)    收藏  举报