Iterator主要有三个方法:hasNext()、next()、remove()详解

在Java中,`Iterator` 接口是集合框架中用于迭代访问集合元素的标准方式之一。它定义了三个主要方法:

1. `hasNext()`: 用于检查迭代器是否还有下一个元素。
2. `next()`: 用于获取迭代器的下一个元素。
3. `remove()`: 用于从集合中移除迭代器最后访问过的元素。

下面是这些方法的源码解释:

### 1. `hasNext()`

```java
public interface Iterator<E> {
    boolean hasNext();
}
```

在源码中,`hasNext()` 方法没有具体的实现,因为它是一个接口方法,由实现 `Iterator` 接口的类(如 `ArrayList`、`LinkedList` 等)来实现。它的作用是检查迭代器是否还有下一个元素。当集合中还有未被遍历的元素时,`hasNext()` 返回 `true`,否则返回 `false`。

### 2. `next()`

```java
public interface Iterator<E> {
    E next();
}
```

与 `hasNext()` 类似,`next()` 也是一个接口方法,没有具体的实现。当调用 `next()` 方法时,迭代器会返回当前位置的元素,并将迭代器的位置移到下一个元素。如果没有下一个元素,会抛出 `NoSuchElementException` 异常。

### 3. `remove()`

```java
public interface Iterator<E> {
    void remove();
}
```

`remove()` 方法用于从集合中移除迭代器最后访问过的元素。在调用 `remove()` 方法之前必须先调用 `next()` 方法,否则会抛出 `IllegalStateException` 异常。`remove()` 方法不是所有的 `Iterator` 实现都支持的,如果不支持,会抛出 `UnsupportedOperationException` 异常。

总的来说,这三个方法是 `Iterator` 接口的核心方法,通过它们可以在集合中实现遍历并对元素进行操作。

例题:

好的,以下是使用代码形式详细解释 `Iterator` 的三个方法:

```java
import java.util.ArrayList;
import java.util.Iterator;

public class IteratorExample {
    public static void main(String[] args) {
        // 创建一个整数列表
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(-2);
        numbers.add(3);
        numbers.add(-4);
        numbers.add(5);

        // 使用 Iterator 遍历列表并移除负数
        Iterator<Integer> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            Integer number = iterator.next();
            if (number < 0) {
                iterator.remove(); // 移除负数
            }
        }

        // 打印移除负数后的列表
        System.out.println("移除负数后的列表: " + numbers);

        // 使用 Iterator 计算列表中所有正数的总和
        int sum = 0;
        iterator = numbers.iterator(); // 重新获取迭代器,重置位置
        while (iterator.hasNext()) {
            Integer number = iterator.next();
            sum += number;
        }

        // 输出正数总和
        System.out.println("正数总和: " + sum);
    }
}
```

在这个例子中,我们创建了一个整数列表 `numbers`,然后使用 `Iterator` 来遍历列表并移除负数。首先我们使用 `iterator()` 方法获取列表的迭代器,然后在 `while` 循环中使用 `hasNext()` 方法检查是否还有下一个元素,如果有,则使用 `next()` 方法获取下一个元素。如果当前元素是负数,我们就使用 `remove()` 方法将其移除。完成移除后,我们打印移除负数后的列表。

接着,我们再次使用 `Iterator` 计算列表中所有正数的总和。同样地,我们获取迭代器,然后在 `while` 循环中使用 `hasNext()` 和 `next()` 方法来遍历列表,并将所有正数累加到变量 `sum` 中。最后,我们输出正数的总和。

通过这个例子,可以清楚地看到 `Iterator` 的三个方法 `hasNext()`、`next()` 和 `remove()` 的使用方式和效果。

举例2

好的,下面是另一个例子,演示如何使用 `Iterator` 的三个方法来处理字符串列表:

```java
import java.util.ArrayList;
import java.util.Iterator;

public class IteratorStringExample {
    public static void main(String[] args) {
        // 创建一个字符串列表
        ArrayList<String> strings = new ArrayList<>();
        strings.add("apple");
        strings.add("banana");
        strings.add("orange");
        strings.add("grape");

        // 使用 Iterator 遍历列表并输出字符串的长度
        Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()) {

//这行代码是在迭代器 iterator 上调用 next() 方法,然后将返回的元素赋值给字符串变量 str
            String str = iterator.next();
            System.out.println("字符串 '" + str + "' 的长度为: " + str.length());
        }

        // 使用 Iterator 移除长度超过5的字符串
        iterator = strings.iterator(); // 重新获取迭代器,重置位置
        while (iterator.hasNext()) {
            String str = iterator.next();
            if (str.length() > 5) {
                iterator.remove(); // 移除长度超过5的字符串
            }
        }

        // 打印移除长度超过5的字符串后的列表
        System.out.println("移除长度超过5的字符串后的列表: " + strings);
    }
}
```

在这个例子中,我们首先创建了一个字符串列表 `strings`,然后使用 `Iterator` 来遍历列表并输出每个字符串的长度。我们使用 `hasNext()` 和 `next()` 方法来遍历列表,然后在循环中获取每个字符串并输出其长度。

接着,我们再次使用 `Iterator` 来移除列表中长度超过5的字符串。我们重新获取迭代器,然后使用 `hasNext()` 和 `next()` 方法遍历列表。如果当前字符串的长度超过5,我们就使用 `remove()` 方法将其移除。

最后,我们打印移除长度超过5的字符串后的列表。通过这个例子,可以清楚地看到 `Iterator` 的三个方法 `hasNext()`、`next()` 和 `remove()` 的使用方式和效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值