
| 인터페이스 | 특징 | 구현체 |
|---|---|---|
List | 순서 유지, 중복 허용 | ArrayList |
Set | 순서 없음, 중복 불가 | HashSet |
Map | 키-값 구조, 키 중복 불가 | HashMap |
특징 선형 구조이며 요소의 순서가 있고 중복을 허용한다
ArrayList는 요소 추가와 삭제 시 배열의 크기를 조정해야 하므로, 빈번한 요소 추가와 삭제가 발생하는 경우 성능이 저하될 수 있다.
왜냐하면 배열의 크기를 조정하는 과정에서 많은 시간이 소요되기 때문
LinkedList는 연결 리스트 기반의 리스트 구현체로, 각 요소가 이전 요소와 다음 요소의 참조를 가지고 있다. 이 구조는 요소 추가와 삭제가 빈번한 경우에 유리
LinkedList는 요소 추가와 삭제 시 참조만 변경하면 되므로, 성능이 우수 왜냐하면 배열의 크기를 조정할 필요가 없다.
LinkedList는 인덱스를 사용하여 요소에 접근할 때, 처음부터 순차적으로 탐색해야 하므로 접근 속도가 느림
왜냐하면 각 요소의 참조를 따라가야 하기 때문.
HashSet 은 순서를 유지하지 않고 중복을 허용하지 않는다.
- 비선형 구조이기에 순서가 없으며 그렇기에 인덱스도 존재하지 않는다.
- 그렇기에 값을 추가하거나 삭제할 때에는 내가 추가 혹은 삭제하고자 하는 값이 Set 내부에 있는지 검색 한 뒤 추가나 삭제를 해야 하므로 속도가 List구조에 비해 느리다.
TreeSet은 HashSet과 마찬가지로 Set 인터페이스를 구현한 클래스로써 객체를 중복해서 저장할 수 없고 저장 순서가 유지되지 않는다는 Set의 성질을 그대로 가지고 있다
- HashSet과는 달리 TreeSet은 이진 탐색 트리(BinarySearchTree) 구조로 이루어져 있다
- 이진 탐색 트리는 추가와 삭제에는 시간이 조금 더 걸리지만 정렬, 검색에 높은 성능을 보이는 자료구조
- HashSet보다 데이터의 추가와 삭제는 시간이 더 걸리지만 검색과 정렬에는 유리
HashMap 은 키(Key) - 값(Value) 구조로 데이터를 저장합니다.(키: 값)
키는 중복될 수 없지만 값은 중복 가능
순서보장 X
HashMap은 이름 그대로 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 가지고 있다
TreeMap은 이진트리를 기반으로 한 Map 컬렉션
자동으로 정렬된다
- TreeMap에 저장하면 자동으로 정렬된다.
- 키는 저장과 동시에 오름차순으로 정렬
숫자는 값으로, 문자는 유니코드로 정렬됨- 데이터를 추가 삭제가 느림
- 하지만 조회가 빠르다