확장 for에서 list 요소 삭제 문제
별
hashset을 확장형 for문으로 돌리면서 요소들을 삭제하는 반복문입니다.
for(pmanager pstr : pmanager){
for(temp tstr : sss){
if(pstr.ismember(tstr.getid())){
container.remover(tstr);
}
}
}
위의 이중 for문에서 pmanager의 list를 하나씩 돌리면서 하나의 pmanager에 sss list를 하나씩 대입 하면서 일치하는 것이 있으면은 container 안에서 해당 tstr을 삭제하는 방법입니다. 그런데 삭제하는 구문에서 에러가 납니다.오류는 이렇게 나구요
exception in thread main java.util.concurrentmodificationexception
at java.util.hashmap$hashiterator.nextentry(hashmap.java:1091)
at java.util.hashmap$keyiterator.next(hashmap.java:1128)
문제가 안에 for문에서 해당 순성의 요서를 삭제를 하면은 그 다음 요소를 찾아 가지 못해서 생기는 거 같은데
c같은 경우 리스트에서 다음 링크를 찾지 못하는 문제 인거 같습니다.
어떻게 처리를 해야 할지 잘 모르겠습니다. 좀 가르쳐 주세요
-
나나
아~! 감사합니다.
-
2gether
흠...
조금만 더 찾아 보시지.. 계속 안된다고만..
방법은 어떻게든 있습니다.
Map someMap = ....;
Set set = somMap.keySet();
Object[] objs = (Object[]) set.toArray();
for ( int i = objs.length-1 ; i = 0 ; i-- ) {
someMap.remove(objs[i]);
} -
가리매
확장 for문의 기본 문법이
for(Stirng str : TTT){
}
이렇게 됩니다. 그럼 여기서 size를 구하라는 말은 TTT의 사이즈인데 만약에 4라고 하면은
반복문을 돌릴때
for(int i=4; i 0 i--) === 이렇게 되는데 이게 배열을 찾아 갈 수 있나요?
index로 해서 찾을 수 있는 것이 아니지 않습니까? -
알찬해
사이즈부터 -1씩;;
-
파랑
죄송하지만 역방향으로는 어떻게 돌리죠? 확장 for같은경우 시작값만 주면 알아서 찾아가는거 아닌가요? 흠.. 잘 모르겠어요
-
정예
찬님 말씀처럼 거꾸로 돌리셔서 지우는 방법이 좋습니다. ^^
순방향으로 돌리면 뒤에 오는 노드를 인지 하지 못하는 경우가 있기때문에
역방향으로 거꾸로 지워나가는 방법을 쓰셔야 할 듯 합니다. -
히메
collection에서 iterator를 구해서 루프를 도는 도중에
해당 collection의 데이터를 지우면 원래!! 에러가 나도록 만들어져 있습니다.
왜냐하면 iterator는 해당 collection(ArrayList)의 모든 노드를 차례대로 돌게 되어 있는데,
중간에 add나 remove가 되면 제대로 루프를 못 돌 가능성이 생길 수도 있거등요.
암튼 원래 그렇습니다.
지울것들을 ArrayList에 저장해 두고 난 뒤에,
지울것들이 다 모이