🎸Iterator是什么?
迭代器是Java提供的一种访问集合的方法,Iterator 是 Java 迭代器最简单的实现,常用来访问ArrayList、HashMap等类的对象。
Iterator是一个接口,ListIterator是Collection API中的接口,它扩展了Iterator接口:
package java.util;
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
// Modification Operations
void remove();
void set(E e);
void add(E e);
}
🎹Iterator的基本操作
🚀获取迭代器
可以使用iterator() 方法:
List<Integer> list = new ArrayList<>();
//获取list的iterator
Iterator<Integer> listIterator = list.iterator();
🚀iterator遍历集合
while(listIterator.hasNext()){
System.out.println(listIterator.next());
}
hasNext()方法的作用是没有遍历完成
next()方法有两个作用:1.返回迭代器当前位置结果2.返回结果后让迭代器继续遍历下一位置元素
🚀使用iterator删除元素
示例:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
//获取list的iterator
Iterator<Integer> listIterator = list.iterator();
while(listIterator.hasNext()){
if(listIterator.next()<3) {
listIterator.remove();
}
}
System.out.println(list);
🎺 增强for循环
在java中常常见到这样一种循环:
List<Integer> list = new ArrayList<>();
for (Integer i : list) {
// 相应操作
}
称其为增强for循环,反编译class文件结果如下:
List<Integer> list = new ArrayList();
Integer var3;
for(Iterator var2 = list.iterator(); var2.hasNext(); var3 = (Integer)var2.next()) {
}
可见增强for循环实际上也是使用iterator实现的
🎻注意事项
在使用iterator遍历集合,若对集合内元素进项删除操作,需要注意这样一个问题:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
int i = it.next();
if(i%2 ==0){
list.remove(i);
}
}
System.out.println(list);
当运行上述代码时,会出现异常:
这是因为当边使用迭代器对list进行遍历,边使用remove()删除,导致当使用remove()删除时,迭代器指向元素发生变化,造成“对象的并发修改”的问题,解决这一问题,可以使用iterator接口提供的iterator.remove()删除对象。