Java系列: 關於LinkedList的 ListIterator的add和remove


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的時候就相當於在光標后面插入,此時可以把迭代器想象為光標。

image

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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM