簡體   English   中英

使用iterator.remove()時為invalidStateException

[英]illegalStateException when using iterator.remove ()

我有一個刪除iterator的問題,這導致IllegalStateException。 錯誤發生在

depIterator.remove()我不確定為什么會這樣。 任何幫助,將不勝感激。

List<Dependency> listofAllDependency = new ArrayList<Dependency>();

    while(!dependencyTable.isEmpty()){          
        //allValuesDependentsAreBuilt = false;
        Iterator<Entry<Dependency, List<Dependency>>> depIterator = dependencyTable.entrySet().iterator();

        while(depIterator.hasNext()){
            ArrayList<String> allValuesDependentsAreBuilt = new ArrayList<String>();

            Entry<Dependency, List<Dependency>> depEntry = depIterator.next();


            //If the key's values have no dependencies
            if(depEntry.getValue().size()==0){
                //System.out.println(depEntry.getKey());
                listofAllDependency.add(depEntry.getKey());
                dependencyTable.remove(depEntry); 
                depIterator.remove(); 
            }

            for(Dependency dep :depEntry.getValue()){

                if(!dependencyTable.containsKey(dep)){
                    allValuesDependentsAreBuilt.add("true"); 
                }else
                {
                    allValuesDependentsAreBuilt.add("false"); 
                }
            }

            if(!allValuesDependentsAreBuilt.contains("false")){ 

                listofAllDependency.add(depEntry.getKey());
                dependencyTable.remove(depEntry);
                depIterator.remove();
            }

        }
    }

似乎以下幾行是罪魁禍首:

dependencyTable.remove(depEntry); 

迭代時不要在數據結構上添加/刪除(這會導致IllegalStateException )。

以下內容就足夠了:

  depIterator.remove(); 

當循環數據結構並同時添加或刪除該數據結構的內容時,可能會遇到問題。 如果要在遍歷列表時從列表中刪除項目,建議您跟蹤要刪除的內容,然后在完成循環后將其全部刪除。 仔細查看您的代碼,我會保留這一行

dependencyTable.remove(depEntry);

並刪除修改迭代器的代碼行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM