배열은 크기가 정적이기 때문에 추가 연산시 자리가 부족한 상황이 발생하는 한계가 있다.
ex) 크기가 5인 배열이 꽉 차 있을 때, 원소를 하나 더 추가하고 싶다면 다음 과정을 직접 구현해야 한다.
Collection을 이용하면 배열을 동적으로 변경해서 사용할 수 있다.
주요 인터페이스
Sycnhrnoized
를 유지하는 List
: 두 스레드간의 공유 객체가 있을 때, 동시에 DB에 접근하여 일관성을 해치지 않도록 하기 위해 순서를 만들어주는 Sycnhronized
키워드로 모든 메서드가 구현되어 있다. 동적 배열을 의미하는 “Re-sizable Array”와, 동시성을 의미하는 “Synchronization”Vector
를 사용하면 시간이 저하되고, 애플리케이션의 성능이 떨어진다.Vector
보다는, (동적 배열)한 가지만 구현한 ArrayList
를 사용하다가 동기화가 필요할 때마다 Collections.synchronizedList()
을 사용하는 게 더 유연성 있고 좋은 방법이다.0번째 인덱스는 100번지에 있고, 1번쨰 인덱스는 200번지에 있고~ 등 각 인덱스마다의 주소를 매핑해놓는다. → 매핑해놓았기 때문에 원소 추가/삽입이 훨씬 빠르다.
but, 추가/삽입 연산 일어날 때마다 JVM이 인덱싱(테이블) 업데이트하는 시간이 있고, 주소가 연속적이지 않기 때문에 원소를 검색하는 시간이 느리다.
vs ArrayList
ArrayList는 인덱스를 통해 바로 원소의 위치를 아는 것이 가능하다.
처음 시작 주소 + i * (int형 바이트)
즉, 인덱싱이 빠르다 == 검색이 빠르다.