// 如果想通过iterator进行集合的添加、删除、修改操作,可以使用java.util.ListIterator接口,该接口实现了java.util.Iterator接口,同时还增加了一些额外的方法,方便使用,如add、remove、set、nextIndex(调用next方法返回元素的索引值,int类型)、previousIndex(调用previous方法返回元素的索引值,int类型)。
List<String> staff = new LinkedList<String>();
staff.add("Amy");
staff.add("Bob");
staff.add("Carl");
// 删除方法很特殊,真正删除的是iter左边的元素, 类似于退格键。
ListIterator<String> iter = staff.listIterator();
iter.next();
iter.remove();
// 遍历.
for (Iterator<String> iterator = staff.iterator(); iterator.hasNext();) {
String s = (String) iterator.next();
System.out.println("-------------->" + s);
}
ConcurrentModificationException异常什么时候会发生?
List<String> staff = new LinkedList<String>();
staff.add("Amy");
staff.add("Bob");
staff.add("Carl");
// ConcurrentModificationException异常什么时候会发生?
ListIterator<String> iter = staff.listIterator();
ListIterator<String> iter2 = staff.listIterator();
// 当有多个iterator对同一个list迭代,如果有迭代器对list进行了诸如add或remove的操作时,则另一个迭代器会发生该异常。
// 因为iterator会负责检测所他自己的索引变化跟所迭代集合的变化是否是一致的,如果不一致就会抛出ConcurrentModificationException异常。
// 如果有进行set方法的操作,则不会发生该异常。
iter.add("yyy");
iter.remove();
iter2.next();
// 按顺序添加到集合中.
for (Iterator<String> iterator = staff.iterator(); iterator.hasNext();) {
String s = (String) iterator.next();
System.out.println("-------------->" + s);
}
Java之LinkedList集合结合listIterator的使用案例:
package com.javacore;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class LinkedListTest3 {
public static void main(String[] args) {
List<String> a = new LinkedList<String>();
a.add("a-Amy");
a.add("a-Bob");
a.add("a-Carl");
List<String> b = new LinkedList<String>();
b.add("b-xxx");
b.add("b-yyy");
b.add("b-zzz");
ListIterator<String> aIter = a.listIterator();
Iterator<String> bIter = b.iterator();
// 将b集合插入/合并到a集合中
while (bIter.hasNext()) {
if (aIter.hasNext()) {
aIter.next();
}
aIter.add(bIter.next());
}
// 输出a集合
System.out.println(a);
// 从b中删除第二个元素
bIter = b.iterator();
while (bIter.hasNext()) {
bIter.next(); // 跳过第一个元素
if (bIter.hasNext()) {
bIter.next(); // 跳过下一个元素
bIter.remove(); // 删除那个元素
}
}
// 输出b集合
System.out.println(b);
// 删除集合b
a.removeAll(b);
System.out.println(a);
}
}
posted on 2009-08-18 08:33
David1228 阅读(339)
评论(0) 编辑 收藏 所属分类:
JAVA