Java : List interface

keymu·2024년 9월 19일

1. 소개

  • Java의 컬렉션 프레임워크는 객체의 그룹을 처리하기 위한 강력한 인터페이스와 클래스를 제공합니다.
  • List 인터페이스는 중요한 구성 요소로, 순서가 있는 컬렉션을 제공하며 중복된 요소를 허용합니다.

2. List란?

  • List 인터페이스는 Collection 인터페이스를 확장하며, 특정 순서가 있는 컬렉션을 정의합니다.
  • List의 요소는 인덱스를 통해 접근할 수 있어, 요소의 순서와 인덱스 기반 접근이 중요한 많은 애플리케이션에서 유용하게 사용됩니다.

3. List 인터페이스의 주요 메소드

1) 기본 메소드

int size()
리스트의 요소 개수를 반환합니다.
boolean isEmpty()
리스트가 비어 있는지 확인합니다.
boolean contains(Object o)
리스트에 지정된 요소가 포함되어 있는지 확인합니다.
Iterator iterator()
리스트의 요소를 순회할 수 있는 반복자를 반환합니다.
Object[] toArray()
리스트를 배열로 변환합니다.
T[] toArray(T[] a)
리스트를 지정된 타입의 배열로 변환합니다.


2) 요소 접근

E get(int index)
지정된 위치의 요소를 반환합니다.
E set(int index, E element)
지정된 위치의 요소를 새로운 요소로 교체합니다.
void add(int index, E element)
지정된 위치에 요소를 삽입합니다.
E remove(int index)
지정된 위치의 요소를 제거합니다.
boolean remove(Object o)
지정된 요소의 첫 번째 발생을 제거합니다.


3) 검색 및 인덱스

int indexOf(Object o)
지정된 요소의 첫 번째 발생 위치를 반환합니다.
int lastIndexOf(Object o)
지정된 요소의 마지막 발생 위치를 반환합니다.


4) 부분 리스트 및 범위 작업

List subList(int fromIndex, int toIndex)
지정된 인덱스 범위의 리스트 부분을 반환합니다.


5) 수정 및 삭제

void clear()
리스트의 모든 요소를 제거합니다.
boolean add(E e)
요소를 리스트의 끝에 추가합니다.
boolean addAll(Collection<? extends E> c)
지정된 컬렉션의 모든 요소를 리스트의 끝에 추가합니다.


6) 리스트 반복

ListIterator listIterator()
리스트의 요소를 순회할 수 있는 리스트 반복자를 반환합니다.
ListIterator listIterator(int index)
지정된 위치에서 시작하는 리스트 반복자를 반환합니다.


사용 예제

import java.util.*;

public class ListMethodsExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        
        // 요소 추가
        list.add("사과");
        list.add("바나나");
        list.add("체리");
        
        // 리스트 크기 및 비어있는지 확인
        System.out.println("크기: " + list.size()); // 크기: 3
        System.out.println("비어있는지: " + list.isEmpty()); // 비어있는지: false
        
        // 요소 접근
        System.out.println("인덱스 1의 요소: " + list.get(1)); // 바나나
        
        // 요소 수정
        list.set(1, "블루베리");
        System.out.println("수정된 리스트: " + list); // [사과, 블루베리, 체리]
        
        // 특정 인덱스에 요소 추가
        list.add(1, "블랙베리");
        System.out.println("리스트에 추가 후: " + list); // [사과, 블랙베리, 블루베리, 체리]
        
        // 요소 제거
        list.remove("체리");
        System.out.println("제거 후 리스트: " + list); // [사과, 블랙베리, 블루베리]
        
        // 인덱스 찾기
        System.out.println("블루베리의 인덱스: " + list.indexOf("블루베리")); // 2
        
        // 부분 리스트
        List<String> sublist = list.subList(1, 3);
        System.out.println("부분 리스트: " + sublist); // [블랙베리, 블루베리]
        
        // 리스트 비우기
        list.clear();
        System.out.println("비운 리스트: " + list); // []
    }
}

4. 적절한 구현 선택
ArrayList와 LinkedList는 List 인터페이스의 두 가지 주요 구현입니다. ArrayList는 빠른 랜덤 액세스를 제공하며, LinkedList는 빈번한 삽입과 삭제가 필요한 경우에 유리합니다.

5. 자주 발생하는 문제 및 모범 사례
인덱스가 범위를 벗어나지 않도록 주의하여 IndexOutOfBoundsException을 방지합니다.
사용 사례에 맞는 구현을 선택하여 성능을 최적화합니다.

profile
Junior Backend Developer

0개의 댓글