먼저 구현하려는 로직은 아래와 같다.


ArrayList의 특정부분 부터 ArrayList의 마지막 부분까지 제거하려는 로직이였다.


for ( int i = k ; i < arrayList.size() ; i ++){

arrayList.remove(i);

}


이렇게 작성하였고, 에러는 발생하지 않는다.


문제는, 이와 같이 실행할 경우, ArrayList의 마지막 부분이 삭제되지 않게 된다.


이와 같은 문제점이 발생하게되는 원인은 


1. remove함수에 대한 이해 부족

2. for문의 동작 방식에 대한 이해 부족


2가지가 원인이 되겠다.


먼저, remove()는 해당 인덱스의 엘리먼트를 지워주는 함수로만 생각하였는데, 그 이후에 동작이 하나 더 있었다.


remove()이후에, 해당 인덱스 이후에 엘리먼트가 존재할 경우 인덱스값을 재계산한다는 것이다.


그리고, for문 동작 방식에 대한 이해는 remove와 연관시켜 생각해야되는데,


remove이후에 인덱스값이 재계산된 상태에서 


for의 동작방식에 따라 제일 마지막에 호출하게되는 부분이 size()함수이다.


그러므로 remove로 엘리먼트를 제거하고, 재계산된 size가 호출이되어 마지막 부분이 삭제가 되지 않는다.


이에 대한 해결 방법으로는 간단하게


removeRange()를 사용하거나,


size()함수의 값을 변수에 저장하여 값이 동적으로 변하지 않게 하면된다.



int end = arrayList.size();


for( int i = k; i < end ; i++){

arrayList.remove(i);

}