개발지/Today I learn

[0810] 자바 컬렉션프레임워크 (List)

개발지의 개발자 2023. 8. 10. 23:02

#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 사용이 유리