static void testListIteratorAdd(){ LinkedList<String> strList = new LinkedList<String>(); strList.add("1"); strList.add("2"); strList.add("3"); print("init content:"); printCollection(strList); ListIterator<String> it = strList.listIterator(); it.next(); it.add("1.1"); it.add("1.2"); print("after insert 2 item"); printCollection(strList); }
輸出如下,基本和預期一致,可以連續add,每次add的時候就相當於在光標后面插入,此時可以把迭代器想象為光標。
init content: collection content: item:1 item:2 item:3 after insert 2 item collection content: item:1 item:1.1 item:1.2 item:2 item:3
關於ListIterator.remove的測試
static void testListIteratorRemove(){ LinkedList<String> strList = new LinkedList<String>(); strList.add("1"); strList.add("2"); strList.add("3"); print("init content:"); printCollection(strList); ListIterator<String> it = strList.listIterator(); it.next(); it.remove();//ok print("after remove 1 item"); printCollection(strList); it.remove();//error print("after remove 2 item"); printCollection(strList); }
輸出如下,也就是說,ListIterator.remove是依賴於迭代器的狀態的,每次調用remove之前,必須先調用一次next或者previous函數。
init content: collection content: item:1 item:2 item:3 after remove 1 item collection content: item:2 item:3 Exception in thread "main" java.lang.IllegalStateException at java.util.LinkedList$ListItr.remove(LinkedList.java:923) at me.ygc.javabasic.learnJava.LearnCollection.testListIteratorRemove(LearnCollection.java:33) at me.ygc.javabasic.learnJava.LearnCollection.main(LearnCollection.java:15)