JAVA Iterator迭代器

概述

在程序开发中,经常需要 遍历集合 中的所有元素。
针对这种需求,JAVA提供了接口java.util.Iterator。

由于Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为 迭代器。

作用

Iterable 与 Iterator 搭配使用,实现自定义集合

获取迭代器

想要遍历 Collection 集合,那么就要从 Collection 获取该迭代器,方法如下:

  • public Iterator iterator(): 获取迭代器

常用方法

  • public E next():返回迭代的下一个元素。
  • public boolean hasNext():如果仍有元素可以迭代,则返回 true。
  • remove():移除某个元素

例子

public class IteratorDemo {
      public static void main(String[] args) {
        // 使用多态方式 创建对象
        Collection<String> coll = new ArrayList<String>();

        // 添加元素到集合
        coll.add("串串星人");
        coll.add("吐槽星人");
        coll.add("汪星人");
        //遍历
        //使用迭代器 遍历   每个集合对象都有自己的迭代器
        Iterator<String> it = coll.iterator();
        //  泛型指的是 迭代出 元素的数据类型
        while(it.hasNext()){ //判断是否有迭代元素
            String s = it.next();//获取迭代出的元素
            System.out.println(s);
        }
      }
}

如果集合没有元素了,还继续使用迭代器的next方法,将会抛出 java.util.NoSuchElementException 异常。

例子

实现简单的 ArrayList

package itrable.简单ArrayList;

import java.util.Iterator;

public class MyArrayList<E>  {
    private Object[] data ;

    private int index = 0;

    public MyArrayList(int len) {
        data = new Object[len];
    }

    public void add(E e){
        data[index] = e;
        ++index;
    }

    public Iterator<E> getIt(){
        return new It();
    }
    private class It implements Iterator<E> {
        /**
         * 初始位置
         */
        private int pos = -1;
        @Override
        public boolean hasNext() {
            // 下一个位置,小于数组长度,就认为有下一个
            return pos + 1 < data.length;
        }

        @Override
        public E next() {
            ++pos;
            E ret = (E)data[pos];
            return ret;
        }
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        MyArrayList list = new MyArrayList(4);
        list.add("李雷");
        list.add("韩梅梅");
        list.add("lucy");
        list.add("lili");

        Iterator it = list.getIt();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

原文出处:/show_1EF4sJTuhFx2.html