- Iterator是java的一个接口,核心的作用是遍历容器的元素,容器实现了Iterator接口,可以调用容器的iterator方法获取Iterator的对象
- 原因是容器的实现方式有很多种,有着不同的遍历规则,例如hashset、arraylist、hashmap等,容器自己实现Iterator接口,开发人员就不用关心容器的遍历规则。
boolean hasNext()
- 判断容器里边是否有下一个元素,有则返回true,无则返回fasle;
void next() - 打印集合的下一个元素,指针往下一个节点后移动;
void remove() - 删除指针的上一个元素;
*遍历其中容器的元素,删除张三元素
import java.util.ArrayList;
import java.util.Iterator;
public class Test10 {
public static void main(String[] args) {
//建立一个容器
ArrayList arrayList=new ArrayList();
arrayList.add("张三");
arrayList.add("李四");
arrayList.add("王五");
arrayList.add("政帅");
arrayList.add("曾帅");
//获取iterator对象
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
String next=iterator.next();
if(next.equals("张三")){
iterator.remove();
}
System.out.println(next);
}
System.out.println("======================");
System.out.println(arrayList);
}
}
1.4 Iterator使用的注意事项
1.4.1 Iterator的remove方法
- 使用Iterator的remove()方法的时候先调用next方法不然会抛错IllegalStateException
import java.util.ArrayList;
import java.util.Iterator;
public class Test11 {
public static void main(String[] args) {
//建立一个容器
ArrayList arrayList=new ArrayList();
arrayList.add("张三");
arrayList.add("李四");
arrayList.add("王五");
arrayList.add("政帅");
arrayList.add("曾帅");
//获取iterator对象
Iterator iterator = arrayList.iterator();
iterator.remove();
}
}
- 使用Iterator遍历元素的时候,不允许使用collection的remove方法来移除元素,原因是Iterator遍历元素时不允许其他线程进行修改元素,不然会抛错ConcurrentModificationException
import java.util.ArrayList;
import java.util.Iterator;
public class Test12 {
public static void main(String[] args) {
//建立一个容器
ArrayList arrayList=new ArrayList();
arrayList.add("张三");
arrayList.add("李四");
arrayList.add("王五");
arrayList.add("政帅");
arrayList.add("曾帅");
//获取iterator对象
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
String next=iterator.next();
if(next.equals("张三")){
//使用collection方法增加元素
arrayList.add("王武");
}
System.out.println(next);
}
System.out.println("======================");
System.out.println(arrayList);
}
}
1.4.2 Iterator遍历元素只能调用1次next()方法
- 从源码得知每一次调用next的方法cursor下标都会增加1 如果在遍历调用2次就会大于容器的size 就会抛错NoSuchElementException
import java.util.ArrayList;
import java.util.Iterator;
public class Test10 {
public static void main(String[] args) {
//建立一个容器
ArrayList arrayList=new ArrayList();
arrayList.add("张三");
arrayList.add("李四");
arrayList.add("王五");
arrayList.add("政帅");
arrayList.add("曾帅");
//获取iterator对象
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
if(iterator.next().equals("张三")){
iterator.remove();
}
System.out.println(iterator.next());
}
System.out.println("======================");
System.out.println(arrayList);
}
}



