[JAVA] 컬렉션 Collection 정리 (LIST, SET, MAP)
컬렉션 (Collection) 이란 ?
많은 데이터 요소를 효율적으로 관리하기 위한 자료구조

Collection : List, Set, Queue로 크게 3가지 상위 인터페이스로 분류할 수 있다.
그리고 여기에 Map의 경우 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류된다.
* 자바에서의 자료구조 유형은 다음과 같다.
- 순서가 있는 목록인 List형
- 순서가 중요하지 않은 목록인 Set형
- 먼저 들어온 것이 먼저 나가는 Queue형 (FIFO)
- KEY-VALUE의 형태로 저장되는 Map형
자바 컬렉션은 객체를 수집해서 저장하는 역할을 한다.
자바 컬렉션 프레임워크는 몇 가지 인터페이스를 통해 다양한 컬렉션을 이용할 수 있도록 한다.
그중 크게 List, Set, Map 을 정리해보았다.
1. List : 이름과 같이 목록처럼 데이터를 순서에 따라 관리, 데이터 중복 허용 ex)대기자 명단
- ArrayList : 많은 데이터 처리시 성능이 떨어지지만 각 데이터에 대한 인덱스를 가져 검색이 빠르다, 순차적 접근 O, 동기화 처리가 되는 컬렉션 생성하면 멀티쓰레드환경에서 쓸 수 있음
(배열 구조 이용하기 때문에 데이터 추삭을 배열 복사하는 방법으로 처리, 추삭 많을 경우 오버헤드 발생 多
중간에 삽입될 때 데이터들이 뒤로 밀리면서 성능저하 큼)
- Vector : 비교적 성능이 좋지 않고 무거워 잘 사용 X(ArrayList의 이전 버전이며 모든 메서드 동기화되어 있음)
(vector를 본 적이 없다....ㅎ 혹시 사용되어 있는 부분이 있는지 낼 검색해봐야지)
- LinkedList : 순서가 변경되는 경우 노드 링크만 변경하면 되므로 삽입/삭제가 빈번할 때 빠름,but 검색이 느리다.
추가 삭제할라면 어쨋든 순차탐색을 해야할텐데 삽입 삭제할 때도 느린 거 아닌가 ...?
2. Set : 순서 유지 X, 데이터의 중복 허용 X ex)양의 정수집합, 소수의 집합
- HashSet : 가장 빠른 접근 속도를 가지고 있지만, 순서를 알 수 없다.
- LinkedHashSet : 요소가 추가된 순서대로 접근이 가능하다.
- TreeSet : 정렬된 순서대로 보관하며, 정렬방법을 지정할 수 있다.
3. Map : 데이터를 Key와 Value로 짝을 이루어 관리하며, Key 값은 중복 허용 X.
* Map의 주요 특징
- 모든 데이터는 키와 값이 존재한다.
- key없이 value만 저장할 수는 없다.
- value 없이 key만 저장할 수도 없다.
- key는 해당 Map에서 고유해야만 한다.
- value는 Map에서 중복되어도 전혀 상관 없다.
- 데이터 추가 순서는 중요하지 않다(데이터를 저장한 순서대로 결과가 출력되지 않는다).
- HashMap : 중복 허용X , 순서 보장 X, NULL 허용 (Null빼고 보장 ㄴㄴ)
- HashTable : HashMap 보다는 느리지만, 동기화를 지원한다. NULL 불가
- TreeMap : 정렬된 순서대로 Key와 Value를 저장하므로 검색은 빠르지만, 데이터 추가/삭제 시 정렬로 인해 느리다.
정렬되는 순서는 숫자 > 알파벳 대문자 > 알파벳 소문자 > 한글
정렬을 해야 할 필요가 있다면 HashMap 보다는 TreeMap을 사용하는 것이 더 유리하다.
- LinkedHashMap : HashMap과 기본적으로 동일하지만 입력한 순서대로 접근이 가능하다.
그럼 마지막으로 항상 헷갈리는 ArrayList LinkedList 에 대해 정리되어 있는 포스팅을 발견하게 되어 아래에 참조걸어두고 끝
[JAVA] ArrayList vs LinkedList 완벽 정리 — Developer_TaeHui (tistory.com)