import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Iterator;
public class test {
public static void main(String[] args) {
// 创建集合对象
List<String> list = new ArrayList<String>();
// 添加
list.add("dzm");
list.add("xyq");
System.out.println(list); // [dzm, xyq]
// -------------------- Iterator 迭代器
// Iterator 迭代器
Iterator<String> it = list.iterator();
// 便利,从上到下便利
while (it.hasNext()) {
System.out.println(it.next()); // dzm xyq
}
// 循环中途插入数据,会报错
for (String string : list) {
if (string.equals("dzm")) {
list.add("dll"); // Exception in thread "main" java.util.ConcurrentModificationException
}
}
// -------------------- ListIterator 迭代器
// ListIterator 迭代器
// ListIterator<String> lit = list.listIterator(list.size()); // 将位置移到最尾部,方面从下到上便利
ListIterator<String> lit = list.listIterator(); // 默认从 0 开始
// 便利,从上到下便利
while (lit.hasNext()) {
System.out.println(lit.next()); // dzm xyq
}
// 便利,从下往上便利
while (lit.hasPrevious()) {
System.out.println(lit.previous()); // xyq dzm
}
// 便利,从上往下便利,循环中途插入数据,没问题
while (lit.hasNext()) {
String s = lit.next();
if (s.equals("dzm")) {
// Iterator 无法做到进行添加操作,通过变量 list 也不行,因为在调用 next() 的时候,会比较实际修改集合的次数与预期修改集合的次数效验,会不一致。
// ListIterator 会在调用 next() 的时候,同步实际与预期修改次数,保持一致,所以可以进行添加
lit.add("djy");
}
}
System.out.println(list); // [dzm, djy, xyq]
}
}