Java에서 Collection은 데이터의 집합, 그룹을 의미합니다.
Collection의 주요 인터페이스에는 List와 Map, Set이 있는데 이 세가지 자료구조의 특징을 한번 알아보겠습니다.
순서가 있으며 데이터의 중복을 허용하는 자료구조입니다.
크기가 가변적이며 비어있는 데이터가 없습니다.
인덱스를 통해 저장 데이터에 접근이 가능합니다.
만약 원하는 데이터가 뒤쪽에 있을 경우 속도가 떨어집니다. (리스트를 순회해야 하기 때문에)
단방향 포인터 구조로 데이터 순차적 접근에 강점을 가집니다.
배열을 기반으로 데이터를 저장합니다.
데이터 삽입, 삭제가 느리고 데이터 검색이 빠릅니다.
양방향 포인터 구조로 데이터 삽입, 삭제가 빠릅니다.
ArrayList 보다 검색이 느립니다.
.
.
.
Array의 경우 길이가 고정되어 변경이 불가능하지만 ArrayList의 경우 Array를 이용해 만든 List형 자료구조입니다. Array와 다르게 길이를 할당하지 않지만 데이터 추가시 배열의 최대 크기가 넘으면 2배 크기의 배열을 만들고 원본을 복사하여 재생성 합니다.
ArrayList는 배열을 이용하여 리스트를 구현한 것 입니다. 다만 배열을 가변적으로 사용하며 리스트가 가지는 특성인 저장순서 유지와 중복 허용의 특징을 가지고 있습니다. ArrayList는 클래스이기 때문에 배열을 추가, 삭제 할 수 있는 기능을 함께 포함하고 있습니다.
Array는 동적으로 사이즈 변경이 안되지만 ArrayList의 경우에는 가능합니다.
Key와 Value의 한쌍으로 이루어진 데이터의 집합 입니다.
Key에 대한 중복이 없으며 순서를 보장하지 않습니다. (데이터는 중복을 허용합니다.)
뛰어난 검색 속도를 가지고 인덱스가 따로 존재하지 않습니다.
내부적으로 배열을 만들어 관리하며 Key 값으로 넘겨준 객체의 해시 코드를 계산하여 배열의 접근 인덱스로 사용합니다.
Key와 Value 값으며 NULL을 허용합니다.
동기화가 보장되지 않습니다.
검색에 가장 뛰어난 성능을 가집니다.
Key와 Value 쌍을 내부적으로 RedBack Tree (이진 탐색 트리)로 저장하여 관리합니다.
Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능합니다.
저장 시 정렬을 하기 때문에 시간이 다소 오래 걸립니다.
데이터의 집합이며 순서가 없고 중복된 데이터를 허용하지 않습니다.
중복되지 않은 데이터를 구할 때 유용합니다.
빠른 검색 속도를 가지고 인덱스가 따로 존재하지 않습니다.
HashSet은 객체들을 순서없이 저장하고 동일한 객체는 중복 저장하지 않습니다.
NULL 값을 허용하고 TreeSet 보다 삽입, 삭제가 빠릅니다.
이진 탐색 트리(Red Black Tree)를 기반으로 합니다.
데이터들이 오름차순으로 정렬됩니다.
데이터 삽이브 삭제에는 시간이 걸리지만 검색과 정렬이 빠릅니다.
List는 데이터들이 순서대로 저장되며 데이터의 중복이 허용됩니다.
(순서 O, 데이터 중복 O)
Set은 순서가 보장되지 않는 데이터의 집합으로 데이터의 중복이 허용되지 않습니다.
(순서 X, 데이터 중복 X)
Map은 순서가 보장되지 않고 Key 값의 중복은 허용하지 않지만 Value 값의 중복은 허용됩니다.
(순서 X, 키는 중복 X, 값은 중복 O)
https://velog.io/@kwj2435/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-list-map-set-%EC%B0%A8%EC%9D%B4