리스트(List)란?
1) 자바 콜렉션 프레임워크중에서 가장 많이 사용하는 자료구조는 리스트(List)일 것이다. 리스트는 특정 타입 값들이 순차적으로 정렬된 컬렉션이다. 대표적인 구현 클래스로는 ArrayList, LinkedList 등이 있다.
2) 배열 역시 데이터의 집합을 순차적으로 표현하는 용도이나 사이즈에 제한이 있다. 배열은 생성시 선언한 사이즈에 한해서 사용을 해야하는 단점이 있지만, 리스트의 경우는 사이즈에 대한 한계가 없다. 이 점이 배열보다 앞선 장점이 아닐까 한다.
ArrayList
1) 내부적으로 배열을 사용하는 List 인터페이스의 구현체이며, 배열의 특징을 모두 가지고 있다.
2) ArrayList 객체 생성시 배열과 같이 사이즈를 지정할 수 있다. 이 사이즈는 내부 배열의 초기 사이즈이다. 만약 크기를 지정하지 않는다면 기본 배열크기인 10이 설정된다.
3) 배열이 꽉 차게 된다면, ArrayList는 자동적으로 사이즈가 더 큰 배열을 생성하여 원소들을 재할당한다. 하지만 새로운 배열을 생성후 복사를 하는 과정이 있어야 하기 때문에 시간이 소요되고 메모리도 소모하게 된다는 단점이 있다. 따라서 데이터의 크기가 크거나 예측이 되는 사이즈라면 초기 사이즈 설정을 해주는 것이 더 효율적이다.
4) 배열의 시작 위치나 중간 위치에 새로운 원소를 추가하려고 하면 공간을 만들기 위해 새로운 배열 생성 및 복사를 하여 이동시켜 주는 작업이 진행되어야 하므로 효율적이지 못하다. (역시 배열의 특징)
5) 또한 원소를 삭제해도 배열의 크기는 줄어들지 않으므로 메모리 사용 측면에서 효율적이지 못하다.
LinkedList
1) 다음 노드를 가리키는 참조값이 있으며, 다음 노드만 참조하므로 단방향의 특징을 가지는 List 구현체이다.
2) 리스트의 첫번째 위치나 중간 지점에 데이터를 추가/삭제하게 된다면 다음 노드를 가리키는 참조값만 변경하여 주면 되므로 ArrayList보다 추가/삭제에 효율적이다.
3) 데이터 삭제시 앞뒤의 참조값만 변경해주면 되며, 제외된 값은 GC에 의해 소멸되므로 ArrayList와 달리 메모리 사용 측면에서 효율적이다.
4) ArrayList와 같이 인덱스로 바로 검색을 할 수 없으며 앞에서부터 순회하여 검색하여야 한다.
※ 참고자료
- 자바 프로그래밍 면접, 이렇게 준비한다
'기타' 카테고리의 다른 글
자바 컬렉션 Map (1) | 2016.02.13 |
---|---|
버블정렬, 삽입정렬, 퀵정렬, 병합정렬 (0) | 2016.02.04 |