ArrayList, LinkedList, Vector 차이

2024. 4. 22. 14:00·프로그래밍 언어/자바

ArrayList, Vector, LinkedList는 모두 자바에서 제공하는 컬렉션 프레임워크의 일부인 동적 리스트 구현입니다. 각 컬렉션은 고유한 특징과 장단점이 있습니다.

ArrayList:

  • ArrayList는 동적 배열을 구현합니다. 즉, 요소를 추가하거나 제거함에 따라 크기가 동적으로 변화합니다.
  • ArrayList는 고정 크기 배열을 사용하여 요소를 저장합니다. 요소를 추가하거나 제거할 때 필요한 경우 새로운 배열로 복사하는 "복사-기존-수정" 전략을 사용합니다.
  • ArrayList는 임의 접근(random access)을 지원합니다. 즉, 인덱스를 사용하여 특정 요소에 빠르게 접근할 수 있습니다. O(1)의 시간 복잡도를 가집니다.
  • ArrayList는 요소를 삽입하거나 제거하는 작업이 비용이 많이 들 수 있습니다. 특히 배열의 용량이 가득 찬 경우 새로운 배열로 복사하는 과정이 필요합니다.
  • ArrayList는 요소를 검색하는 작업이 효율적입니다. 인덱스를 사용하여 직접 접근할 수 있으므로 O(1)의 시간 복잡도를 가집니다.
  • ArrayList는 요소를 정렬된 순서로 유지하지 않습니다. 요소를 추가하거나 제거함에 따라 인덱스가 변경될 수 있습니다.

Vector:

  • Vector는 ArrayList와 유사하지만, 멀티 스레드 환경에서 안전하도록 동기화(synchronized)된 컬렉션입니다. 즉, 여러 스레드가 동시에 Vector를 수정하더라도 데이터 일관성이 보장됩니다.
  • Vector는 동적 배열을 사용하여 요소를 저장합니다. 요소를 추가하거나 제거할 때 항상 새로운 배열로 복사하는 "복사-기존-수정" 전략을 사용합니다.
  • Vector는 임의 접근(random access)을 지원합니다. 인덱스를 사용하여 특정 요소에 빠르게 접근할 수 있습니다. O(1)의 시간 복잡도를 가집니다.
  • Vector는 요소를 삽입하거나 제거하는 작업이 비용이 많이 들 수 있습니다. 항상 새로운 배열로 복사하는 과정이 필요합니다.
  • Vector는 요소를 검색하는 작업이 효율적입니다. 인덱스를 사용하여 직접 접근할 수 있으므로 O(1)의 시간 복잡도를 가집니다.
  • Vector는 요소를 정렬된 순서로 유지하지 않습니다. 요소를 추가하거나 제거함에 따라 인덱스가 변경될 수 있습니다.

LinkedList:

  • LinkedList는 연결 리스트(linked list)를 구현합니다. 즉, 요소를 노드(node)로 연결하여 관리합니다.
  • LinkedList는 동적 크기 조정이 가능합니다. 요소를 추가하거나 제거함에 따라 노드 연결을 변경합니다.
  • LinkedList는 임의 접근(random access)을 지원하지 않습니다. 특정 요소에 접근하려면 노드를 따라 순회해야 하므로 O(n)의 시간 복잡도를 가집니다.
  • LinkedList는 요소를 삽입하거나 제거하는 작업이 효율적입니다. 노드 연결만 변경하면 되므로 O(1)의 시간 복잡도를 가집니다.
  • LinkedList는 요소를 검색하는 작업이 비용이 많이 들 수 있습니다. 노드를 따라 순회해야 하므로 O(n)의 시간 복잡도를 가집니다.
  • LinkedList는 요소를 정렬된 순서로 유지하지 않습니다. 요소를 추가하거나 제거함에 따라 노드 연결이 변경될 수 있습니다.
주제 ArrayList LinkedList Vector
동기화 없음 없음 있음
임의 접근 허용 허용 안 함 허용
메모리 위치 연속 연속 아님 연속
null 값 지원 지원 지원
데이터 구조 동적 배열 양방향 연결 리스트 동적 배열
중복 허용 예 예 예
삽입 및 삭제 느림 빠름 느림

위 표는 ArrayList, LinkedList, Vector의 차이점을 요약한 것입니다. 각 컬렉션은 고유한 특징과 장단점이 있습니다.

요약하면, ArrayList와 Vector는 동적 배열을 구현하며 임의 접근을 지원하지만 삽입 및 제거 작업에 비용이 많이 들 수 있습니다. 반면, LinkedList는 연결 리스트를 구현하며 임의 접근을 지원하지 않지만 삽입 및 제거 작업이 효율적입니다. 각 컬렉션은 특정 사용 사례와 요구 사항에 따라 적합합니다.

저작자표시 (새창열림)

'프로그래밍 언어 > 자바' 카테고리의 다른 글

자바의 자원 관리 방법 비교: try-with-resources와 try-finally  (0) 2024.06.06
일급 컬렉션  (0) 2024.04.04
'프로그래밍 언어/자바' 카테고리의 다른 글
  • 자바의 자원 관리 방법 비교: try-with-resources와 try-finally
  • 일급 컬렉션
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (286)
      • 여러가지 (107)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DP
    docker
    Spring WebFlux
    Spring Boot
    SAA
    프로그래머스
    celery
    OOP
    항해99
    reactor
    백준
    spring
    WebFlux
    FastAPI
    그리디
    Redis
    ecs
    취업리부트
    시험
    EC2
    java
    완전탐색
    자바
    Docker-compose
    Python
    RDS
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    파이썬
    mybatis
    AWS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
ArrayList, LinkedList, Vector 차이
상단으로

티스토리툴바