콘텐츠로 이동

List

List

List: 순서가 있고 중복을 허용하는 컬렉션. 인덱스로 요소에 접근한다.

왜 사용하는가?

  • 순서가 있고 중복을 허용하는 데이터를 다룰 때
  • 인덱스를 통한 임의 접근이 필요할 때
  • 배열의 고정 크기 한계를 극복하고 동적으로 크기를 조절해야 할 때

특징

  • 순서 유지: 요소가 추가된 순서를 보장
  • 중복 허용: 동일한 값을 여러 번 저장 가능
  • 인덱스 접근: 0부터 시작하는 인덱스로 요소 접근

장점

항목 설명
동적 크기 자동으로 크기 조절
순서 보장 삽입 순서 유지
중복 허용 같은 값을 여러 번 저장 가능

단점

항목 설명
중복 제거 불가 직접 처리해야 함
삽입/삭제 비용 중간 위치 조작 시 O(n)

어떻게 사용하는가?

List<String> list = new ArrayList<>();

// 추가
list.add("A");
list.add(0, "B"); // 인덱스 위치에 삽입

// 조회
String value = list.get(0);
int size = list.size();

// 검색
boolean contains = list.contains("A");
int index = list.indexOf("A");

// 삭제
list.remove(0);         // 인덱스로 삭제
list.remove("A");       // 값으로 삭제

// 순회
for (String s : list) {
    System.out.println(s);
}

// 정렬
Collections.sort(list);
list.sort(Comparator.naturalOrder());

성능 비교

연산 ArrayList LinkedList
인덱스 조회 O(1) O(n)
검색 O(n) O(n)
앞에 추가/삭제 O(n) O(1)
뒤에 추가/삭제 O(1) O(n)
중간 추가/삭제 O(n) O(n)

어떨 때 많이 쓰는가?

상황 선택
조회 위주, 크기 변경 적음 ArrayList
앞/중간 삽입·삭제가 잦음 LinkedList
순서 있는 데이터 목록 관리 ArrayList
큐/덱으로도 사용 LinkedList or ArrayDeque

실무에서는 대부분 ArrayList를 기본으로 사용한다.