Collections (Linked List, Array List, Vector)

dykwon·2024년 1월 17일

LinkedList, ArrayList, 그리고 Vector은 모두 Java에서 제공하는 리스트(List) 인터페이스를 구현한 클래스들입니다. 각각의 특성과 차이점을 알아보겠습니다.

1. ArrayList:

  • 특성:

    • 동적 배열(dynamic array)로 구현된 리스트.
    • 배열 기반으로 데이터를 저장하며, 인덱스를 사용하여 빠른 접근이 가능.
  • 장점:

    • 랜덤 접근(인덱스를 통한 접근)이 빠르다.
    • 데이터의 추가와 삭제가 리스트의 끝에서 이루어질 때 빠르다.
  • 단점:

    • 중간에 요소를 추가하거나 삭제할 때는 다른 요소들을 밀거나 당기는 작업이 필요하므로 비효율적.
    • 중간에 요소가 삭제될때 일부 Heap 메모리가 빈 상태가 되어, GC의 대상이 됨.
  • 사용 사례:

    • 랜덤 액세스가 자주 일어나는 경우.
    • 데이터의 추가와 삭제가 주로 리스트 끝에서 이루어지는 경우.

2. LinkedList:

  • 특성:

    • 이중 연결 리스트(doubly linked list)로 구현된 리스트.
    • 각 노드가 이전 노드와 다음 노드를 가리키며, 노드를 통한 순차 접근이 빠르다.
  • 장점:

    • 중간에 요소를 추가하거나 삭제할 때 효율적.
    • 리스트의 양 끝에서 요소를 추가하거나 삭제할 때도 빠르다.
  • 단점:

    • 랜덤 접근이 비효율적.
  • 사용 사례:

    • 데이터의 중간에 요소를 추가하거나 삭제해야 하는 경우.
    • 순차적인 접근이 자주 필요한 경우.

3. Vector:

  • 특성:

    • 기존의 자바 컬렉션 프레임워크에서 제공되던 클래스.
    • ArrayList와 유사하지만, 동기화된 메서드로 구성되어 있어 스레드 안전(thread-safe).
  • 장점:

    • 스레드 안전하게 사용 가능.
  • 단점:

    • 스레드 동기화 비용으로 인해 성능이 떨어질 수 있음.
  • 사용 사례:

    • 멀티스레드 환경에서 스레드 안전성이 필요한 경우.

차이점 요약:

  • ArrayList: 랜덤 액세스가 빠르며, 요소 추가/삭제가 끝에서 이루어질 때 효율적.
  • LinkedList: 중간에 요소를 추가/삭제할 때 효율적이며, 순차 접근이 빠르다.
  • Vector: 스레드 안전하게 동작하지만, 성능 면에서는 ArrayList보다 떨어질 수 있다.
profile
Programmer, who turns ideas into value

0개의 댓글