arraylist remove하면서 발생하는 에러 원인
글쓴이: gclass00 / 작성시간: 수, 2014/03/19 - 5:10오후
ArrayList<Integer> B_array = new ArrayList<>(); ArrayList<String> A_array= new ArrayList<>(); A_array.add(0,"c"); B_array.add(0,1); A_array.add(1,"c"); B_array.add(1,2); A_array.add(2,"o"); B_array.add(2,3); A_array.add(3,"c"); B_array.add(3,4); A_array.add(4,"c"); B_array.add(4,5); A_array.add(5,"c"); B_array.add(5,6); for(int i=0;i<B_array.size()-1;i++) { for(int j=i+1;j<B_array.size();j++) { if(A_array.get(i)==A_array.get(j)) { B_array.remove(j);A_array.remove(j); } } } for(int i=0;i<B_array.size();i++) { System.out.println(B_array.get(i)+" "+A_array.get(i)); } }
제가 원하는 결과는
1 c
3 o
인데,
1 c
3 o
5 c
로 나오네요. 무엇이 잘못되었나요?
Forums:
음...위의 소스는 자바 환경이신데...제가
음...위의 소스는 자바 환경이신데...
제가 LINUX/ g++ / C++로 같은 동작을 하는 코드를 작성해서 테스트해봤는데, 원하는 결과로 나타나네요.
5 c는 안 나타납니다. 실행환경 차이일까요.
1 c
3 o
까지만 나옵니다.
i=0일 때, 값이 c인걸 삭제합니다.안쪽 루프는
i=0일 때, 값이 c인걸 삭제합니다.
안쪽 루프는
j=1 -> c'c'occc 에서 'c' 삭제합니다. -> A=coccc이고, B=13456입니다.
j=2 -> co'c'cc에서 'c' 삭제합니다. -> A=cocc이고, B=1356입니다.
j=3 -> coc'c'에서 'c' 삭제합니다. -> A=coc이고, B=135입니다. j==B_array.size()이므로 루프 끝
i=1일 때는 ...
i=2일때 i==B_array.size()-1이므로 루프 안돕니다. 끝
리스트를 iterate하면서, 멤버를 삭제하는 것은
리스트를 iterate하면서, 멤버를 삭제하는 것은 안하는게 좋습니다.
댓글 달기