Skip to content

java.lang.Iterable 和 java.util.Iterator 和 java.util.Enumeration

这三个接口都为泛型接口,定义简单
先来看一看Iterable接口,@since 1.5。
而Iterable存在的目的就是使实现它的类可以使用foreach循环

public interface Iterable {
    Iterator iterator();
}

里面只有一个方法,就是返回一个Iterator,用于迭代。
我们马上来看一看Iterator接口

public interface Iterator {
    boolean hasNext();  
    E next();
    void remove();
}

也很简单,三个方法,一个判断是否有后续元素,一个获取后续元素,一个删除当前元素。
这里要注意remove方法,因为是删除当前元素,所以调用remove方法前,至少要调用一次next方法。
一般实现时通过一个标识变量,在next方法中修改为可remove状态,在remove方法中先判断标识,然后remove,最后变量改为不可remove状态。
我们来写一些非常简单的代码试一试。

public class MyList implements Iterable {

    // 定义一个数组
    private String[] list = { "A", "B", "C" };

    // 实现Iterable接口
    public Iterator iterator() {
        return new MyIterator();
    }

    // 实现Iterator接口
    public class MyIterator implements Iterator {

        private int i = 0;

        public boolean hasNext() {
            return i < 3;
        }

        public String next() {
            return list[i++];
        }

        public void remove() {
            // TODO 我比较懒,这里和我要测的foreach关系不大,就不写了。
        }
    }

    public static void main(String args[]) {
        MyList list = new MyList();
        for (String var : list) {
            System.out.println(var);
        }
    }
}

输出结果
A
B
C

Iterable定义在1.5版本,Itertor定义在1.2版本。
而定义在最初的1.0版本用于枚举和迭代的,是Enumeration接口。
Itertor是作为Enumeration的替代,为了向下兼容,Enumeration并没有标注弃用

public interface Enumeration {
    boolean hasMoreElements();
    E nextElement();
}

Itertor相比Enumeration有两点改进
1.增加了remove方法
2.简化了方法名。

Published inJava

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注