你好,我是吴计可师,一个工作十多年的后端开发,曾就职京东、阿里等多家互联网头部企业。
文章可能会比较长,主要解析的非常详解,或涉及一些底层知识,供面试高阶难度用。可以根据自己实际理解情况合理取舍阅读
Iterator 是 Java 集合框架中的一个接口,定义了遍历集合元素的一些基本方法。它允许通过统一的方式遍历任何实现了 Collection 接口的集合类(如 ArrayList、HashSet、LinkedList 等)。Iterator 提供了访问集合元素的功能,并且支持在遍历过程中删除元素。
描述:检查集合中是否还有下一个元素。
返回值:如果有下一个元素,返回 true;如果没有,返回 false。
boolean hasNext();
描述:返回集合中的下一个元素,并将游标向前移动。
返回值:返回下一个元素。
抛出异常:如果没有下一个元素(即调用 hasNext() 返回 false),则会抛出 NoSuchElementException。
E next();
描述:删除迭代过程中最后返回的元素。此方法是可选的,意味着不是所有实现了 Iterator 的集合类都会支持此操作。
抛出异常:如果在调用 next() 之前没有调用 remove(),或者如果集合本身不支持删除操作,会抛出 IllegalStateException。
void remove();
0
遍历集合:Iterator 提供了一种通用的遍历方式,可以遍历任何实现了 Collection 接口的集合类。
修改集合:通过 remove() 方法,Iterator 允许在遍历时删除元素,避免了并发修改异常的问题。
import java.util.*;
public class IteratorExample {
public static void main(String[] args) {
// 创建一个 ArrayList
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 获取 Iterator 对象
Iterator<String> iterator = list.iterator();
// 使用 Iterator 遍历集合
while (iterator.hasNext()) {
System.out.println(iterator.next()); // 输出 A B C
}
}
}
import java.util.*;
public class IteratorRemoveExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 获取 Iterator 对象
Iterator<String> iterator = list.iterator();
// 删除元素 "B"
while (iterator.hasNext()) {
String element = iterator.next();
if (element.equals("B")) {
iterator.remove(); // 使用 Iterator 删除元素
}
}
System.out.println(list); // 输出 [A, C]
}
}
统一接口:Iterator 提供了一个统一的接口来遍历不同类型的集合,可以使用相同的方式遍历 List、Set、Queue 等。
安全删除:通过 Iterator 的 remove() 方法,可以避免在遍历过程中直接修改集合引起的并发修改异常(ConcurrentModificationException)。
避免 IndexOutOfBoundsException:与直接使用 for 循环遍历集合不同,Iterator 不依赖于索引,避免了索引越界的问题。
for-each 是对 Iterator 的一种简化,它的优势是代码简洁,但它不支持在遍历过程中删除元素。
Iterator 提供了更多的控制能力(如删除操作),但需要显式地调用 hasNext() 和 next()。
// 使用增强型 for
for (String item : list) {
System.out.println(item);
}
与 ListIterator 比较:
ListIterator 是 Iterator 的子接口,专门用于 List 类型的集合,提供了更多的功能,如双向遍历(hasPrevious() 和 previous() 方法)、修改元素(set())以及插入新元素(add())。
Iterator 只能向前遍历,而 ListIterator 支持双向遍历。
Iterator 适用于所有 Collection 类,而 ListIterator 仅适用于 List 类型的集合。
Iterator 是一个非常重要的接口,广泛应用于 Java 集合框架中。它提供了统一、通用的遍历方法,并且可以在遍历过程中安全地删除元素。如果你需要遍历集合并进行删除操作,Iterator 是一个非常有效的工具。
今天的内容就分享到这儿,喜欢的朋友可以关注,点赞。有什么不足的地方欢迎留言指出,您的关注是我前进的动力!