一、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()方法,否则会抛出异常。
原创文章,作者:DANU,如若转载,请注明出处:https://www.506064.com/n/131061.html
微信扫一扫
支付宝扫一扫