Iterator
lterator 迭代器接口,实现了此接口的类才可以使用 增强for
String 字符串 不是使用 增强for遍历
- iterator.hasNext() ->判断有没有下一个元素
- iterator.next() ->获取下一个元素
/**
* 获取 iterator 迭代器
* iterator.HasNext() 判断下 指针右侧有没有元素
* iterator.next() 获取指针右侧的元素 并且有右移动一位
*/
Iterator<Integer> iterator = arr.iterator();
while (iterator.hasNext() ) {
iterator.next();
}
在arr.iterator 时创建 镜像
创建进行之后,到 next 开始获取指针到 所有指针获取完成的期间
不能被 remove 以外的任何方法 修改 原数据,否则会造成 元数据和 镜像的不一致。
Exception in thread "main" java.util.ConcurrentModificationException
Iterator<Integer> iterator = arr.iterator();//创建镜像
**注意:**每次next中 只能调用一次 remove 方法
# ListIterator
- hasNext() 顺序遍历 next() 获取元素
- hasPrevious() 倒序遍历 previons() 获取元素
ArrayList<Integer> arr = new ArrayList<>();
arr.add(100);
arr.add(200);
arr.add(300);
//获取指针
ListIterator<Integer> integerListIterator = arr.listIterator();
//顺序 遍历,每次获取下一个指针 数据
while(integerListIterator.hasNext()){
integerListIterator.next();
}
//倒序 遍历 每次获取上一个元素
while(integerListIterator.hasPrevious()){
integerListIterator.previous();
}
- set() 方法可以在遍历的时候往里面添加数据
ListIterator<Integer> x = arr.listIterator(1);//创建一个从 下标 1开始的指针
while(integerListIterator.hasNext()){
Integer next = integerListIterator.next();
if(next == 200){ //当指针 获取200的元素时
arr.add(400); //会在指针移动后的下一个位 添加400
}else if( next == 400){
x.set(500); //这里 在添加400 但是 指针的镜像不会怎加,最后一次循环还是没跑到这里
}
}