[Java] Collection Framework

1 minute read

Published:

In this post, concept of Collection Framework is introduced.

Collection Framework

자바 컬렉션 프레임워크(Java Collection Framework, JCF)는 데이터를 저장하고 관리하기 위한 표준화된 클래스와 인터페이스 집합이다. 배열처럼 단순한 구조보다 더 다양한 기능(동적 크기 조정, 정렬, 탐색, 중복 허용 여부 등)을 제공하며, 자바에서 자료구조를 다룰 때 사실상 기본 도구로 사용된다.

java.util 패키지에 포함되어 있다.

List

List<E> 는 인터페이스이다. 아래의 주요 메서드를 구현해야 한다.

boolean add(E e)       // 요소 추가
void add(int index, E e)  // 특정 위치에 요소 삽입
E get(int index)       // 인덱스로 요소 가져오기
E set(int index, E e)  // 인덱스 위치의 요소 수정
E remove(int index)    // 인덱스 위치 요소 삭제
boolean remove(Object o) // 특정 객체 삭제
int size()             // 리스트 크기
boolean contains(Object o) // 요소 존재 여부
  • ArrayList class

    • 배열 기반 동적 리스트이다. 배열 기반인데 동적이라는 의미가 다소 의아하게 느껴질 수 있다.

      Java 에서 일반 배열은 한 번 크기를 정하고 바꿀 수 없다. 하지만 ArrayList 는 초기 용량 10으로 시작하여 꽉 차면 자동으로 더 큰 배열을 새로 만들고, 기존 데이터를 복사해 넣는다.

    • Generic 을 사용한다.

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

      이렇게 하면 컴파일러가 다음과 같은 동작을 막아준다.

      List<String> list = new ArrayList<>();
      list.add("hello");
      // list.add(100); // 컴파일 에러, 제네릭 덕분에 String만 허용
      String s = list.get(0); // 자동으로 String 반환, 캐스팅 필요 없음
      
    • 사용 예시

      List<String> arrList = new ArrayList<>();
      arrList.add("A");
      arrList.add("B");
      arrList.add(1, "X"); // 중간 삽입
      System.out.println(arrList); // [A, X, B]
      
    • 랜덤 접근($O(1)$) 빠름. 삽입/삭제는 느림 (중간 원소 이동 필요 → $O(n)$).

  • LinkedList class

    • 이중 연결 리스트 기반. 삽입/삭제 $O(1)$ (노드 연결만 바꾸면 됨). 랜덤 접근 $O(n)$ → 인덱스 접근 느림.

    • 사용 예시

      List<String> linkList = new LinkedList<>();
      linkList.add("A");
      linkList.add("B");
      linkList.addFirst("X"); // LinkedList만 지원
      System.out.println(linkList); // [X, A, B]
      

Leave a Comment