package com.neutron.collection.iterator;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
* Iterator接口学习
* @author zhanght
*
*/
public class IteratorDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add("123");
list.add(12);
list.add(true);
list.add(false);
list.add("end");
/*
* 会存在的问题:
* 删除某个索引的元素后,该元素后面的数据会向前挪动一位。
* 比如删除索引1位置的元素,原来索引位置2的元素向前挪动一位,
* 下一轮遍历后原来索引2位置的元素就会遍历不到。
*/
for (int i=0; i<list.size(); i++) {
if (i == 1) {
list.remove(i);
}
System.out.println(list.get(i));
}
/*
* 会发生并发访问异常
* 原因在于在迭代的过程中,不可以使用集合对象的方法操作集合中的元素。
* 在迭代器中,只能用迭代器方法操作元素,而Iterator接口方法有限,只有判断取出删除操作
* public interface Iterator<E> {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
需要使用ListIterator方法进行操作
*
*/
// for(Iterator iterator = list.iterator(); iterator.hasNext();) {
// Object obj = iterator.next();
// if ("end".equals(obj)){
// list.add("begin");
// }
// }
System.out.println("------------");
for(ListIterator iterator = list.listIterator(); iterator.hasNext();) {
Object obj = iterator.next();
System.out.println(obj);
if ("end".equals(obj)){
iterator.add("begin");
}
/*
* 123
true
false
end
*/
}
System.out.println("add: " + list);
// add: [123, true, false, end, begin]
}
}
Iterator
最新推荐文章于 2023-02-02 21:28:19 发布