자바의 ArrayList는 collection framework의 일부로 ArrayList 사용 시에 java.utill 패키지를 import한다. 이 포스트는 array와 ArrayList의 차이점에 집중하여 ArrayList의 개념을 다뤄보려 한다.
앞선 소개에서 자바의 ArrayList class가 collection framework의 일부라고 설명했다.
ArrayList
class는 자바가 제공하는 List
라는 데이터 구조 interface를 implements한다. List
interface는 Queue, Set, Map interface와 함께 Collection
interface를 implements하기 때문에 ArrayList
class는 collection
interface의 일부인 셈이다.
List는 인덱스를 사용해 데이터에 access하는 데에서 배열과 공통되지만, 데이터 사이즈를 가변적으로 취할 수 있는 것에서 차이점을 가진다. ArrayList 역시 List interface의 구현체 때문에 이는 ArrayList와 array의 공통점과 차이점도 된다.
ArrayList는 기본적인 array의 기능을 제공하지만, 추가적인 기능 또한 제공하고 있다.
인덱스를 활용해 데이터에 접근하고 값을 저장하지만, List의 사이즈가 동적이라는 점이 주요한 차이다.
ArrayList에 어떠한 value를 insert하거나 delete할 때에 ArrayList는 동적으로 그 사이즈를 늘리고 줄인다.
배열의 선언을 살펴보자.
int[] scores = new int[10];
배열은 선언 시에 데이터의 사이즈를 고정해 메모리를 할당받는다.
ArrayList<Integer> Scores = new ArrayList<>();
반면에 ArrayList는 사이즈를 선언하지 않는다.
또한, int의 wrapper class Integer
로 class를 선언한다.
왜 prmitive type(int나 char 같은)으로 선언하지 않고 wrapper class 형태로 선언하는 것일까? ArrayList의 angled bracket에 들어갈 자료형은 type이 아닌 객체이어야 하기 때문이다.
Scores.add(75);
Scores.remove(4); //0번째부터 시작해 4번째의 값을 삭제하는 것
ArraayList는 가변 길이이기 때문에 삽입 시에 크기를 늘려 데이터를 삽입하고, 삭제 시에 해당 원소를 삭제하고 빈 공간을 허용하지 않고 원소들을 빈틈없이 이어 붙인다.
배열의 경우 어떤 원소를 삭제한다면, 그 공간을 비워 놓게 되는데 ArrayList는 공간을 효율적으로 활용한다.
Scores.add(10);
Scores.add(20);
Scores.add(30);
System.out.println(Scores);
System.out.println(Scores.get(2));
/* output
[10, 20, 30]
30
*/
ArrayList 안의 데이터를 취할 때는 get(idx)를 사용한다.
Scores.add(10);
Scores.add(20);
Scores.add(30);
System.out.println(Scores.size());
// ...
for(int i=0; i<Scores.size(); i++){
}
/* output
3
*/
배열에서 length를 사용하면 고정 사이즈를 반환한다. ArrayList의 size는 가변 사이즈를 반환한다.
Scores.add(10);
Scores.add(20);
Scores.add(30);
Scores.set(1, 100);
System.out.println(Scores);
/* output
[10, 100, 30]
*/
set은 인덱스와 value를 파라미터로 받는다. 인덱스 전달 시에는 가변 길이 내의 유효한 인덱스를 전달해야 한다.
isEmpty()
: List가 비어있는지를 확인한다.contains(E value)
: value가 List에 있는지 확인한다.indexOf(E value)
: value가 List 상에 몇 번째인지를 반환한다.clear()
: List를 비운다.addAll(List list)
: List에 파라미터 list 전체를 add한다.참조