[英]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.