您的位置:

Java中Iterator迭代器详解

一、Iterator简介

Iterator是一种迭代器,它可以遍历集合类中所有元素。

Iterator迭代器经常被用于遍历集合,其中包括ArrayList、LinkedList、HashSet、TreeSet等集合。

Iterator提供了一个统一的遍历方式,同时可以防止程序员直接访问集合中的元素。

二、Iterator的优势

相对于其他集合遍历方式,Iterator有以下优势:

1. 隐藏迭代器的底层实现细节,不必关心元素是否存储于集合内或近集合上,只需调用hasNext()和next()方法即可访问元素。

2. Iterator迭代器是线程安全的,可以同时被多个线程使用。

3. Iterator提供了更加简洁而优美的语法以及不产生额外的负担。

三、Iterator常用方法

Iterator提供了以下常用方法:

    public boolean hasNext()              // 如果仍有元素可以迭代,则返回 true
    public E next()                        // 返回下一个元素
    public void remove()               // 从迭代器指向的 collection 中移除最后返回的元素(可选操作)

1. hasNext()方法

hasNext()方法返回一个boolean类型的值,如果还有下一个元素可迭代,方法返回true,否则返回false。

例如:

    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add("Java");
        list.add("Python");
        Iterator
    iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

   
  

2. next()方法

next()方法返回集合的下一个元素,并且将迭代器的位置向下移动一位。

例如:

    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add("Java");
        list.add("Python");
        Iterator
    iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

   
  

3. remove()方法

remove()方法用于删除集合中迭代器访问的最后一个元素。如果调用remove()方法之前未调用next()方法,或者在上一次调用next()方法之后调用remove()方法,则会抛出IllegalStateException异常。

例如:

    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add("Java");
        list.add("Python");
        Iterator
    iterator = list.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            if ("Java".equals(str)) {
                iterator.remove();
            }
        }
        System.out.println(list);//输出:[Python]
    }

   
  

四、Iterator的局限性

Iterator虽然有很多优势,但它也有一些局限性:

1. 仅能用一次,每调用一次hasNext()和next()方法都会让迭代器向下移动一次位置,不能重复使用。

2. 不能对集合进行同时的遍历和修改操作,否则会抛出ConcurrentModificationException异常。

3. 遍历时不能直接删除集合元素,只能使用迭代器的remove()方法。

五、总结

Iterator提供了一种简单而有效的遍历集合的机制。它不仅隐藏了底层实现细节,还提供了更加简洁而优美的语法。

需要注意的是,Iterator只能用一次,不能对集合进行同时的遍历和修改操作,遍历时只能使用迭代器的remove()方法,否则会抛出异常。