[0810] 자바 컬렉션프레임워크 (List)
#List
- 배열과 같이 객체를 일렬로 늘어놓은 구조
- 인덱스로 객체를 관리. 저장된 객체에는 자동으로 인덱스 지정
- 인덱스로 객체를 검색, 추가, 삭제 가능
- List 인터페이스의 메서드
기능 | 리턴 타입 | 메서드 | 설명 |
객체 추가 | void | add(int index, Object element) | 주어진 인덱스에 객체를 추가 |
boolean | addAll(int index, Collection c) | 주어진 인덱스에 컬렉션을 추가 | |
Object | set(int index, Object element) | 주어진 위치에 객체를 저장 | |
객체 검색 | Object | get(int index) | 주어진 인덱스에 저장된 객체를 반환 |
int | indexOf(object o) / lastIndexOf(object o) |
순방향 / 역방향으로 탐색하여 주어진 객체의 위치를 반환 | |
LisIterator | listIterator() / listIterator(in index) |
List의 객체를 탐색할 수 있는 ListIterator 반환 / 주어진 index부터 탐색할 수 있는 ListIterator 반환 |
|
List | subList(int fromIndx, int toIndex) | fromIndex부터 toIndex에 있는 객체를 반환 | |
객체 삭제 | Object | remove(int index) | 주어진 인덱스에 저장된 객체를 삭제하고 삭제된 객체를 반환 |
boolean | remove(Object o) | 주어진 객체를 삭제 | |
객체 정렬 | void | sort(Comparator c) | 줘진 비교자(comparator)로 List를 정렬 |
#ArrayList
- List 인터페이스를 구현한 클래스.
- 기능적으로 Vector와 동일하나, Vector의 개선된 것으로 대신 사용된다.
- 객체가 인덱스로 관리되다는 점에서 배열과 유사하나, ArrayList는 배열과 크기가 변할 수 있다.
- 데이터의 순서가 유지된다.
- ArrayList의 생성
ArrayList<타입 매개변수> 객체명 = new ArrayList<타입 매개변수>(초기 저장 용량);
- 인덱스는 0부터 저장, 특정 인덱스 객체 삭제 시 뒤 인덱스부터 1씩 당겨진다.
#LinkedList
- 데이터를 효율적으로 추가, 삭제, 변경하기 위해 사용.
- 데이터가 불연속적으로 존재하나 연결되어 있음.
- LinkedList의 자료구조
- 데이터를 삭제하는 등의 원인으로 나머지 데이터가 이동해야 하는 상황 발생 시, 링크를 재설정함.
- 배열과 달리 데이터의 이동을 위해 복사할 필요가 없어 처리 속도가 훨씬 빠르다.
#ArrayList와 LinkedList의 비교
(1) ArrayList
- 객체를 중간에서 추가하거나 삭제할 경우 데이터 이동이 많이 일어나 속도 저하.
- 데이터를 순차적으로 추가하거나 삭제하는 경우에 유리 (0번 인덱스부터 추가하거나 마지막 인덱스부터 삭제)
- 데이터를 검색에 유리(인덱스를 통해 바로 데이터 접근)
(2)LinkedList
- 객체를 중간에 추가하거나 삭제할 때 ArrayList보다 빠른 처리속도를 보여줌
- 자료를 검색하기 위해서 거쳐야 할 순번이 많아 검색속도는 ArrayList보다 느리다.
→ 데이터의 개수가 변하지 않을 때는 ArrayList 사용이 유리
→ 데이터의 잦은 변경이 필요할 때는 LinkedList 사용이 유리