티스토리 뷰

발생일: 2008.09.03

문제:
for 문을 돌면서 ArrayList 나 Vector를 참조 중에, element를 삭제하려고 하니 Exception이 발생한다.

해결책:
Iterator의 remove()를 사용한다!!
 
특히 vector의 경우는 동기화가 철저하게 되어 있기 때문에
for 문들 돌면서 element를 remove하면 exception이 발생한다
 
예)
   Vector v = new Vector();
   ...
   for (One one : v) {
      ...
      v.remove(one);  // 이렇게 하면 현재 v 벡터를 참조 중에 참조 중인 객체를 변경하려 하기 때문에 동기화에 어긋나 exception이 발생된다
   }
 
 
exception없이 동기화를 잘 처리하려면...
Iterator를 사용하자.
 
예)
   for (Iterator it = v.iterator(); it.hasNext();) {
      it.next();    // it.next()를 호출한 후에
      ...
      it.remove();   // 해당 객체를 제거한다. next() 호출 후 1회만 가능하다
   }
 
 
좀더 자세한 내용은.
구글에서 vector arraylist remove exception 등으로 검색해보자
반응형
댓글
공지사항