Java 리스트 클래스 비교

song yuheon·2023년 9월 12일
0

Java

목록 보기
35/46
post-thumbnail

ArrayList

  • 내부 구조: ArrayList는 배열을 기반으로 한다.
  • 특징
    • 빠른 요소 접근: 인덱스를 통한 요소 접근이 O(1)의 시간 복잡도를 가진다.
    • 끝에서의 빠른 추가/삭제: 리스트의 끝에서의 추가/삭제 작업은 O(1)의 시간 복잡도를 가진다.
    • 중간 요소 추가/삭제 느림: 중간 요소의 추가/삭제 작업은 O(n)의 시간 복잡도를 가진다.
  • 활용 시나리오
    • 임의 접근이 빈번한 경우: 인덱스를 통한 빠른 요소 접근이 필요한 경우에 적합하다.
    • 리스트 끝에서 주로 추가/삭제 작업이 이루어지는 경우: 리스트 끝에서의 작업이 주가 되는 경우에 적합하다.

LinkedList

  • 내부 구조: LinkedList는 이중 연결 리스트를 기반으로 한다.
  • 특징
    • 중간 위치에서 빠른 추가/삭제: 중간 위치에서의 추가/삭제 작업은 O(1)의 시간 복잡도를 가진다.
    • 임의 위치에서의 조회가 느림: 임의 위치에서의 조회 작업은 O(n)의 시간 복잡도를 가진다.
  • 활용 시나리오
    • 리스트 중간에서 추가/삭제 작업이 빈번한 경우: 중간 위치에서의 작업이 빈번하게 이루어지는 경우에 적합하다.
    • 순차적인 데이터 접근이 주로 필요한 경우: 데이터를 순차적으로 접근하는 경우에 적합하다.

CopyOnWriteArrayList

  • 내부 구조: CopyOnWriteArrayList는 배열을 기반으로 하며, 변경 시마다 새로운 배열을 생성한다.
  • 특징
    • 스레드 안전함: 멀티 스레드 환경에서도 안전하게 사용할 수 있다.
    • 변경 작업 시 성능 저하: 추가/삭제 작업이 빈번할 때 성능이 저하된다.
  • 활용 시나리오
    • 멀티 스레드 환경에서 리스트 사용: 멀티 스레드 환경에서 안정적으로 리스트를 사용할 수 있다.
    • 읽기 작업이 더 많은 경우: 읽기 작업이 더 많이 이루어지는 경우에 적합하다.

Stack

  • 내부 구조: Stack은 Vector를 기반으로 한다.
  • 특징
    • LIFO 데이터 구조: Last In First Out (LIFO) 방식의 데이터 구조를 따른다.
    • 스레드 안전함: Vector 기반으로 하므로 스레드 안전하다.
  • 활용 시나리오
    • 스택 데이터 구조 필요: 스택 데이터 구조가 필요한 경우에 적합하다.

Vector

  • 내부 구조: Vector는 동기화된 배열을 기반으로 한다.
  • 특징
    • 스레드 안전함: 스레드 안전한 환경에서 사용할 수 있다.
    • 성능: ArrayList보다 성능이 떨어진다.
  • 활용 시나리오
    • 멀티 스레드 환경에서 리스트 사용: 멀티 스레드 환경에서 안전하게 리스트를 사용할 수 있다.

profile
backend_Devloper

0개의 댓글