Cute Running Puppy
본문 바로가기
개발일기

List, Set, Map 차이점

by 징구짱 2023. 6. 2.
728x90

List
  • 순서가 있는 데이터의 집합
  • 중복된 값의 저장이 가능
  • 인덱스를 사용하여 각 요소에 접근할 수 있음

ArrayList

  • 배열을 사용하여 데이터를 저장
  • 데이터를 인덱스로 직접 접근할 수 있어 get(int index) 연산이 매우 빠름, O(1)의 시간 복잡도를 가짐
  • 단점은 데이터의 삽입 또는 삭제가 발생하면 해당 인덱스 이후의 모든 요소를 이동시켜야 하기 때문에 시간이 더 많이 소요됨 최악의 경우 O(N)의 시간 복잡도를 가질 수 있음

LinkedList

  • 노드(Node)들이 서로 연결된 구조로 데이터를 저장
  • 각 노드는 현재 요소의 값과 다음 요소를 가리키는 포인터를 가지고 있음
  • 데이터를 검색할 때는 처음부터 마지막 노드까지 하나씩 탐색, 최악의 경우에는 모든 요소를 탐색해야함, O(N)의 시간 복잡도를 가짐
  • 장점은 데이터의 삽입 또는 삭제가 상대적으로 빠름. 해당 위치에 대한 포인터만 조정하면 되므로 O(1)의 시간 복잡도를 가짐

따라서 빠른 데이터 접근과 조회를 원하는 경우에는 ArrayList를 사용

데이터의 삽입 및 삭제가 빈번한 상황은 LinkedList을 사용하는 것이 적합

 

 


Set
  • 순서가 없는 데이터의 집합(원하는 순서로 직접 정렬하는 것은 불가능)
  • 중복된 값의 저장이 불가능(모든 요소는 유일)
  • Set은 주로 특정 요소가 집합에 속하는지 확인하는데 사용

HashSet

  • Hash Table을 사용하여 데이터를 저장
  • 데이터의 순서를 보장하지 않음. 즉, 데이터가 저장된 순서대로 접근할 수 없음(뒤죽박죽)
  • 데이터를 검색, 삽입, 삭제하는 연산이 평균적으로 O(1)의 시간 복잡도를 가짐
    잘 설계하고 충돌을 최소화하는 방법을 사용하면 빠른 검색과 삽입이 가능
    그러나 충돌이 자주 발생할 경우 검색 및 삽입 성능이 저하될 수 있음
  • HashSet은 순서가 중요하지 않고 중복을 허용하지 않는 경우에 주로 사용

TreeSet

  • 이진 검색 트리(Binary Search Tree)를 사용하여 데이터를 저장
  • 데이터는 오름차순으로 데이터를 정렬한 상태로 저장. 따라서 데이터에 접근할 때 정렬된 순서대로 접근할 수 있음
  • 데이터를 검색, 삽입, 삭제하는 연산은 이진 검색 트리의 특성에 따라 O(log N)의 시간 복잡도를 가짐
  • TreeSet은 데이터를 정렬된 상태로 유지해야 하고 중복을 허용하지 않는 경우에 주로 사용됩니다.

따라서 빠른 검색, 삽입, 삭제를 원하는 경우에는 HashSet을 사용

데이터를 정렬된 상태로 유지하고 싶거나 정렬된 순서로 데이터에 접근해야 할 경우에는 TreeSet을 사용하는 것이 적합

 

 


Map
  • "키-값" 쌍으로 데이터를 저장
  • 각 요소는 고유한 키(key)를 가지고 있으며, 이를 통해 값을 저장하고 검색

HashMap

  • 해시 테이블(Hash Table)을 사용
  • 데이터의 순서를 보장하지 않음. 즉, 데이터가 저장된 순서대로 접근할 수 없음(뒤죽박죽)
  • 데이터를 검색, 삽입, 삭제하는 연산이 평균적으로 O(1)의 시간 복잡도를 가짐
    잘 설계하고 충돌을 최소화하는 방법을 사용하면 빠른 검색과 삽입이 가능. 그러나 충돌이 자주 발생할 경우 검색 및 삽입 성능이 저하될 수 있음
  • 키와 값은 null이 될 수 있음
  • HashMap은 순서가 중요하지 않고 키와 값의 쌍을 저장하고자 할 때 주로 사용

TreeMap

  • 균형 이진 검색 트리(Balanced Binary Search Tree)를 사용하여 데이터를 저장
  • 키(key)의 오름차순으로 데이터를 정렬한 상태로 저장
  • 데이터를 검색, 삽입, 삭제하는 연산은 이진 검색 트리의 특성에 따라 O(log N)의 시간 복잡도를 가짐
  • TreeMap은 데이터를 정렬된 상태로 유지해야 하고 키와 값의 쌍을 저장하고자 할 때 주로 사용됩니다.

따라서 데이터의 순서가 중요하지 않고 빠른 검색, 삽입, 삭제를 원하는 경우에는 HashMap을 사용하고, 데이터를 정렬된 상태로 유지하고 싶거나 정렬된 순서로 데이터에 접근해야 할 경우에는 TreeMap을 사용하는 것이 적합

728x90

'개발일기' 카테고리의 다른 글

TCP와 UDP  (0) 2023.06.07
트랜잭션  (0) 2023.06.07
REST API란?  (0) 2023.05.30
CI/CD 구축 후 확인 방법  (0) 2023.04.02
CI/CD 파이프라인  (0) 2023.03.22