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); } } |
85SP%Z9~W`J3P4{CWTI8H{3.jpg (51.44 KB, 下载次数: 26)
运行结果
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |