import java.util.*;
class CollectionDemo
{
public static void main(String[] args)
{
method_1();
}
public static void method_1()
{
ArrayList al = new ArrayList();
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
for (ListIterator li = al.listIterator();li.hasNext() ; )
{
Object obj = li.next();
if (obj.equals("java2"))
{
li.add("asd");
li.set("java23");
/*
set的使用规则确实是这样的,迭代的时候不能添加和删除, 我找了一下set 方法的源代码
public void set(E e) { if (lastRet < 0) throw newIllegalStateException(); checkForComodification(); try { ArrayList.this.set(lastRet, e); } catch (IndexOutOfBoundsException ex) { throw newConcurrentModificationException(); } }
他底层调用的是ArrayList的set(int index, E element) 方法,用的是迭代时获得的脚标,它不是 根据光标位置定义的;它们是根据对调用 next() 或 previous() 所返回的最后一个元素的操作定义的。 就是说如果你添加或删除了元素,那 next() 或 previous() 所返回的最后一个元素的位置就不确定了,那设置的位置也就不能确定,
*/
}
sop(obj);
sop(obj.hasPrevious());
}
sop(al);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
} |