一、Iterator简介
Iterator是一种迭代器,它可以遍历集合类中所有元素。 Iterator迭代器经常被用于遍历集合,其中包括ArrayList、LinkedList、HashSet、TreeSet等集合。 Iterator提供了一个统一的遍历方式,同时可以防止程序员直接访问集合中的元素。
二、Iterator的优势
相对于其他集合遍历方式,Iterator有以下优势:
- 隐藏迭代器的底层实现细节,不必关心元素是否存储于集合内或近集合上,只需调用
hasNext()
和next()
方法即可访问元素。 - Iterator迭代器是线程安全的,可以同时被多个线程使用。
- 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<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
2. next()方法
next()
方法返回集合的下一个元素,并且将迭代器的位置向下移动一位。
例如:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
Iterator<String> 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<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
if ("Java".equals(str)) {
iterator.remove();
}
}
System.out.println(list);//输出:[Python]
}
四、Iterator的局限性
Iterator虽然有很多优势,但它也有一些局限性:
- 仅能用一次,每调用一次
hasNext()
和next()
方法都会让迭代器向下移动一次位置,不能重复使用。 - 不能对集合进行同时的遍历和修改操作,否则会抛出
ConcurrentModificationException
异常。 - 遍历时不能直接删除集合元素,只能使用迭代器的
remove()
方法。
五、总结
Iterator提供了一种简单而有效的遍历集合的机制。它不仅隐藏了底层实现细节,还提供了更加简洁而优美的语法。
需要注意的是,Iterator只能用一次,不能对集合进行同时的遍历和修改操作,遍历时只能使用迭代器的remove()
方法,否则会抛出异常。