알고리즘 문제를 풀다보면 문제에 따라 arrayList를 사용해야 하는 경우가 있다. arrayList는 이름부터 array를 담고 있기 때문에 index로 접근할 수 있어서 정리 해보고자 한다.
ArrayList<Integer> caches = new ArrayList<>();
caches.add(1);
caches.add(3);
caches.add(2);
caches.add(4);
cache라는 배열에 1, 3, 2, 4 값을 저장하였다.
int fistNum = caches.get(0);
int lastNum = caches.get(caches.size() - 1);
System.out.println("첫번째 인덱스 값 : " + fistNum); // 1
System.out.println("마지막 인덱스 값 : " + lastNum); // 4
이제 처음 index와 마지막 index의 값을 구해보자.
get 메소드를 사용하면 index의 값을 구할 수 있다.
int numIdx = caches.indexOf(2);
System.out.println("2의 인덱스 값 : " + numIdx); // 2
indexof 메소드를 사용하면 2라는 값의 index 값을 구할 수 있다.
indexof는 위와 같이 return 해주는 값으로 값의 유무를 판단할 수 있다.
그렇다면 특정 값을 삭제하면 어떻게 될까?
2라는 값보다 먼저 존재하는 1을 삭제해보자.
caches.remove(Integer.valueOf(1)); // 값 1을 제거한다.
remove라는 메소드를 통해 1을 삭제하였다.
그렇다면 1이라는 값만 삭제하였을 때, arrayList에는 무슨 변화가 있을까?
1) index는 그대로이며 0번째 배열의 1값만 삭제되었다.
2) 0번째 배열이 값과 함께 지워지고 뒤의 index가 그 자리를 채운다.
System.out.println("2의 인덱스 값 : " + numIdx); // 1
정답은 바로 2번이다.
이제 arrayList에는 {3,2,4}의 값이 존재하게 된다.
이는 arrayList가 array와는 달리 가변적으로 변하는 선형리스트이기 때문이다.