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 |