[JAVA] Iterator 요소삭제

하동구·2021년 5월 4일
0

JAVA

목록 보기
6/10

c++
stl 컨테이너를 iterator로 가리키고 있는 위치를 가져올수 있다.
iter.erase()하면 현재 가리키고 있는 위치의 요소를 삭제한다.
이때 iterator가 가리키고 있는곳이 잘못될수 있다고 판단하기때문에
시퀀스 컨테이너 사용시 보통 iterator iter = iter.erase();
// 정확히는 iterator iter = container.erase(iter);
이런식으로 다음위치를 다시 받아온다.

java
iterator.next() 메서드는 단순 다음 요소를 반환한다.
iterator.remove() 메서드는 현재 가리키고 있는 요소를 삭제한다.
iter 내부에 cursor 변수가 있어서 이를 이용해서 조작하는 것으로 추측된다.
next시 cursor += 1, remove시 sursor -= 1

하지만 단순 cursor가 인덱스처럼 사용된다고 판단하여
remove를 연속으로 두번하면 IllegalStateException 오류가 발생한다.
공식 문서를 보면 한번만 호출할수 있게한다.

remove를 다시 사용하려면 iter.next()를 호출하여 이전에 삭제되었던 다음 요소를 가리키게 한후 사용할 수 있다.
c++처럼 굳이 받아오지 않고 다음값부터 참조하려면 iter.next() 만으로 가능한 것 같다.

profile
한 줄 소개

0개의 댓글