add方法示例
//在最前面添加
List<String> list1 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator1 = list1.listIterator();
listIterator1.add("D");
listIterator1.add("E");
System.out.println(list1);//[D, E, a, b, c]
//在最后面添加
List<String> list2 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator2 = list2.listIterator();
while (listIterator2.hasNext()) {
listIterator2.next();
}
listIterator2.add("D");
listIterator2.add("E");
System.out.println(list2);//[a, b, c, D, E]
//在每個元素的前面和后面都添加
List<String> list3 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator3 = list3.listIterator();
while (listIterator3.hasNext()) {
listIterator3.add("前面");
listIterator3.next();
listIterator3.add("后面");
}
System.out.println(list3);//[前面, a, 后面, 前面, b, 后面, 前面, c, 后面]
//在指定元素的前面和后面添加
List<String> list4 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator4 = list4.listIterator();
while (listIterator4.hasNext()) {
if (listIterator4.next().equals("a")) {//現在指向的是a的后面
listIterator4.previous();//先重新指向a的前面,這里不用擔心NoSuchElementException
listIterator4.add("前面");//在前面添加元素,添加后還是指向的a的前面
listIterator4.next();//向后【再】移動一位,現在指向的是a的后面
listIterator4.add("后面");//在a的后面添加元素
}
}
System.out.println(list4);//[前面, a, 后面, b, c]
remove方法
remove必須要跟在next()或是previous()之后,而且只能執行一次
,刪多個元素,需要再執行next()或previous()。
在執行next()或previous()后不能先執行了 add()方法
。因為add()方法執行以后,迭代器已經移動了,這樣所要刪除的目標元素指向不明,會報異常。
//可以直接add,但不能直接remove,remove必須放在next之后
try {
List<String> list1 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator1 = list1.listIterator();
listIterator1.remove();
} catch (Exception e) {
System.out.println("直接remove會報 IllegalStateException");
}
//標准的做法:在next之后才能remove
List<String> list2 = new LinkedList<String>(Arrays.asList(new String[] { "b", "a", "b", "c", "b", }));
ListIterator<String> listIterator2 = list2.listIterator();
while (listIterator2.hasNext()) {
if (listIterator2.next().equals("b")) listIterator2.remove();
}
System.out.println(list2);//[a, c]
//remove之前不能有add()
try {
List<String> list4 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator4 = list4.listIterator();
while (listIterator4.hasNext()) {
if (listIterator4.next().equals("b")) {
listIterator4.add("添加");
listIterator4.remove();
}
}
} catch (Exception e) {
System.out.println("remove之前有add也會報 IllegalStateException");
}
//移除指定范圍內的所有元素
List<String> list3 = new LinkedList<String>(Arrays.asList(new String[] { "a", "開始", "b", "c", "d", "結束", "e" }));
ListIterator<String> listIterator3 = list3.listIterator();
while (listIterator3.hasNext()) {
if (listIterator3.next().equals("開始")) {
listIterator3.remove();//注釋掉這行代碼則不移除"開始"
while (listIterator3.hasNext()) {
if (!listIterator3.next().equals("結束")) {
listIterator3.remove();//remove之后必須再調用next方法后才能再remove
} else {
listIterator3.remove();//注釋掉這行代碼則不移除"結束"
break;//結束while循環
}
}
}
}
System.out.println(list3);//[a, e]
//替換指定元素
List<String> list5 = new LinkedList<String>(Arrays.asList(new String[] { "a", "b", "c" }));
ListIterator<String> listIterator5 = list5.listIterator();
while (listIterator5.hasNext()) {
if (listIterator5.next().equals("b")) {
listIterator5.remove();
listIterator5.add("替換");
}
}
System.out.println(list5);//[a, 替換, c]
