我一直在讨论这个bug,我不知道问题出在哪里。我的代码是这样的:
ArrayList<String> lTmpIndicsDesc = new ArrayList<String>(indicsDesc);
ArrayList<String> lTmpIndicsAvailableMark = new ArrayList<String>(indicsAvailableMark);
for (Iterator<String> itIndicsDesc = lTmpIndicsDesc.iterator(); itIndicsDesc.hasNext();) {
String sTmpIndicsDesc = itIndicsDesc.next();
for (Iterator<String> itIndicsAvailableMark = lTmpIndicsAvailableMark.iterator(); itIndicsAvailableMark.hasNext();) {
String sTmpIndicsAvailableMark = itIndicsAvailableMark.next();
if (sTmpIndicsDesc.toUpperCase().equals(sTmpIndicsAvailableMark.toUpperCase())) {
itIndicsDesc.remove();
}
}
}
它在删除调用上引发了IllegalStateException。
我一直想知道问题是否会出现,因为我删除了我的列表中的最后一项,但即使在过程中间它也似乎有问题。
请问你能给我一个解释吗?
答案 0 :(得分:4)
您正从内循环内部的lTmpIndicsDesc
列表中删除元素。这意味着你的内部循环可能会尝试两次删除相同的元素,这可以解释你得到的异常。删除元素后,您应该从内部循环中断:
for (Iterator<String> itIndicsDesc = lTmpIndicsDesc.iterator(); itIndicsDesc.hasNext();) {
String sTmpIndicsDesc = itIndicsDesc.next();
for (Iterator<String> itIndicsAvailableMark = lTmpIndicsAvailableMark.iterator(); itIndicsAvailableMark.hasNext();) {
String sTmpIndicsAvailableMark = itIndicsAvailableMark.next();
if (sTmpIndicsDesc.toUpperCase().equals(sTmpIndicsAvailableMark.toUpperCase())) {
itIndicsDesc.remove();
break; // added
}
}
}