Iterator迭代器
注意:
- 如果迭代器没有了下一个元素继续访问next(),则会抛出异常NoSuchElementException
- 在用迭代器迭代Collention遍历集合的时候,这时候如果给被遍历的集合进行,添加或者删除,会导致遍历的结果不确定,而JVM不允许这样做,否则会抛出ConcurrentModificationException异常,当我们使用迭代器的时候,不要在使用过程中进行元素集合的添加或者删除。,用foreach遍历也是一样的。
- 如果想解决并发修改异常,有如下解决方案:
- 不使用迭代器遍历集合。
- 在需要修改集合的时候,不要直接使用集合去操作增删,而使用迭代器代理去操作。
迭代器对象.remove();
但是这个方法不能传参,而且只能删除当前遍历的元素。
(扩展)ListIterator为子迭代器,只有List体系下使用,支持add操作。
Iterator主要用于迭代访问(遍历)Collection中的元素
迭代: Collection集合元素与数组获取元素的通用方式。
Collection中获取迭代器的方法(数组没有迭代器方法,但是可以用for增强访问)
public Iterator iterator()
常用的两种方式:(public 省略)
- E next(): 返回迭代的下一个元素;(如果没有下一个元素而继续访问会报NoSuchElementException错误)
- boolean hasNext() :检查是否有下一个元素;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class DieDai {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("Hello");
coll.add("nice");
Iterator<String> it = coll.iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
增强for
Collection<E> extends Iterable<E>
适用于单列集合
实现了 Iterable 的接口对象成为 "foreach"语句的目标
增强for可以用来遍历Collection集合和数组,不能对元素进行增删操作**
通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作
底层使用的也是迭代器,简化了迭代器的写法。
for(元素的数组类型 : Collection集合or数组) {
// 操作代码。
}