// 如果想通過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 閱讀(348)
評論(0) 編輯 收藏 所屬分類:
JAVA