1. List<E> 컬렉션
List는 객체를 일렬로 저장하고 인덱스로 관리하는 자료구조로, 배열과 유사하지만 크기가 동적으로 변하고 다양한 편의 메서드를 제공한다. 또한 저장된 순서를 유지하며, 중복된 객체 저장도 허용한다. 대표적인 구현 클래스는 아래와 같다.
- ArrayList
- LinkedList
- Vector
- Stack
1 - 1. ArrayList
가장 널리 사용되는 List의 구현 클래스. 배열 기반 구조로, 인덱스를 통한 빠른 검색이 장점이며, 내부 배열의 크기를 초과하면 자동으로 크기를 늘려준다. 하지만 중간 삽입/삭제 시에는 배열 이동이 필요하므로 느릴 수 있다.
1 - 2. LinkedList
연결 리스트 자료구조 기반 구조로, 삽입/삭제가 빠르고 검색이 느리다. 각 요소는 이전/다음 요소의 참조 주소를 저장하고 있다. 중간 삽입/삭제가 자주 일어나는 곳에 적합하지만, ArrayListㅐ보다 검색 성능은 떨어진다.
그림으로 보는 두 구조 비교


1 - 3. 비교 요약 및 활용 팁
비교 요약)
| 항목 | ArrayList | LinkedList |
| 데이터 구조 | 배열 | 연결 리스트 |
| 검색 속도 | 빠름 (인덱스 기반) | 느림 (순차 탐색) |
| 삽입/삭제 속도 | 느림 (복사 필요) | 빠름 (참조만 변경) |
| 중복 허용 | 가능 | 가능 |
| 용도 추천 | 읽기 중심, 순차 추가 | 삽입/삭제 중심 |
활용 팁)
| 상황 | 추천 클래스 |
| 순차적으로 데이터 추가/읽기 위주 | ArrayList |
| 중간에 데이터 삽입/삭제 많음 | LinkedList |
| 동기화 필요 (멀티스레드) | Vector (구버전), Collections.synchronizedList |
2. Set<E> 컬렉션
수학에서의 집합과 같은 개념으로, 중복을 허용하지 않는 자료구조. 저장 순서를 유지하지 않는 것이 일반적이며, 인덱스 기반 탐색은 지원하지 않는다. null 값은 1개까지만 허용된다. 대표 구현 클래스는 아래와 같다.
- HashSet
- LinkedHashSet
- TreeSet
2 - 1. HashSet
가장 널리 사용되는 Set 구현체로 중복을 허용하지 않고 저장 순서도 유지되지 않는다. 내부적으로 Hash Table 구조를 사용한다.
2 - 1 - 1. 동작 원리
- 객체 저장 시 hashCode() 를 호출해 해시값을 생성한다.
- 동일 해시값 존재 시 equals() 로 추가 여부를 판단한다.
- 중복이면 무시하고, 새 객체이면 저장한다.

3. Map<K, V>
key - value 쌍으로 데이터를 저장하는 자료구조. 하나의 키에 하나의 값이 매핑되며, Key는 중복을 허용하지 않지만 Value는 중복이 가능하다. Key를 기반으로 데이터를 저장하고 검색하기에 검색 속도가 빠르며, 대표적인 구현체는 아래와 같다.
- HashMap
- Hashtable
- TreeMap
- LinkedHashMap
- SortedMap
3 - 1. HashMap
Map 인터페이스의 가장 대표적인 구현체로, Hashing 기법을 통해 Key를 빠르게 검색한다. HashMap은 저장 순서를 유지하지 않는다.

3 - 1 - 1. Entry 객체란?
Map 내부에 저장되는 한쌍의 데이터 (Key와 Value).
Map.Entry<K, V> 인터페이스로 표현한다.
| 리턴 타입 | 메서드 | 설명 |
| K | getKey() | Entry의 Key 반환 |
| V | getValue() | Entry의 Value 반환 |
| V | setValue(V value) | Entry의 Value 수정 |
| boolean | equals(Object o) | 두 Entry 동일 여부 비교 |
| int | hashCode() | Entry의 해시코드 반환 |
3 - 2. Map 활용 패턴
| 목적 | 방법 |
| 전체 Key 얻기 | map.keySet() |
| 전체 Value 얻기 | map.values() |
| 전체 Entry 얻기 | map.entrySet() |
| 순회 | for-each, Iterator, Stream |
'자바 고급(JAVA)' 카테고리의 다른 글
| 자료구조, 알고리즘과 Big O (0) | 2026.05.28 |
|---|---|
| Big O에 대한 이해 (0) | 2026.05.28 |
| JCF의 필요성과 구조 이해 (0) | 2026.05.20 |
| 익명 클래스(Anonymous Class) (0) | 2026.05.18 |
| 내부 클래스(Inner Class) (0) | 2026.05.15 |