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
    docker
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号