Java中关于Collection接口的迭代器iterator()方法

关于Collection中的迭代器iterator()方法:

1、Iterator iterator();是一个抽象方法,在集合子类中有重写。

2、这个方法是Collection接口继承了Iterable接口,继承过来的一个方法。

3、该方法返回的是一个Iterator类型接口。

4、每个子类集合中定义了一个私有内部类private class 类名 implements Iterator,已经实现了这个接口。

所以说每个子类可以使用重写的iterator()方法得到一个迭代器对象。

5、通常使用多态这样写:Iterator it = 实例集合对象.iterator();
迭代器接口指向迭代器对象。

子类拿到这个迭代器对象之后,就可以遍历自己集合中的元素。


6、Iterator接口有三个方法:

  • boolean hasNext();
    迭代过程中判断是否还有元素可迭代。

  • Object next();
    返回迭代的下一个元素

  • default void remove();
    在迭代器中删除集合的元素。注意:在迭代过程中不能使用集合自带的remove()方法,会迭代异常。

测试代码:

注意:以下测试代码,迭代方式通用于Collection的所有子类集合,但是,除了Map集合之外。

import java.util.*;

public class Test02 {
    public static void main(String[] args) {
        // 这里先测试List集合,有序可重复
        Collection c = new ArrayList();
        //Collection c = new LinkedList();
        //Collection c = new Vector();

        // 添加几个元素
        c.add(1);
        c.add(3.14);
        c.add("hello");
        c.add("hello");
        c.add(true);
        c.add(new Object());
        System.out.println(c.size());  // 6

        // 拿到集合的迭代器对象
        Iterator it = c.iterator();
        // 开始迭代遍历集合
        while (it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);  // 1   3.14   hello   hello   true   java.lang.Object@7cd84586
        }


        // 再来试一下HashSet集合,无序不可重复
        Collection c1 = new HashSet();
        c1.add(1);
        c1.add(3.14);
        c1.add("hello");
        c1.add("hello");  // 这个"hello"会存储失败,重复了
        c1.add(true);
        c1.add(new Object());
        System.out.println(c1.size());  // 5

        // 获取迭代器
        Iterator it1 = c1.iterator();
        while (it1.hasNext()) {
            Object obj = it1.next();
            System.out.println(obj);  // 1   3.14   hello   java.lang.Object@12edcd21   true
            // 我们发现元素不可重复,且取出来的顺序也是乱的

			// 注意:集合结构发生改变,迭代器必须重新获取。
            // 所以说迭代过程中不能使用Collection的remove()方法,这样会改变迭代器的结构,下一循环迭代就会报异常
        // 如果硬要在迭代中删除元素,是可用使用迭代器自己的remove()方法
        }

    }
}

迭代器遍历方式:

Iterator it = list.iterator();
while (it1.hasNext()) {
	Object obj = it1.next();
	System.out.println(obj); 
}

结论:

集合结构发生改变,迭代器必须重新获取。

迭代过程中不能使用Collection的remove()方法,这样会改变迭代器的结构,下一循环迭代就会报异常。

如果硬要在迭代中删除元素,是可以使用迭代器自己的remove()方法。迭代器自己的删除方法会自动更新迭代器和集合结构。


你可能感兴趣的:(Java,EE,java,iterator)