17.1 List 컬렉션
1. 할 일 목록 (To-Do List) 📝
List 컬렉션은 우리가 흔히 쓰는 “할 일 목록”과 같습니다.
- 순서가 있다: 첫 번째 할 일, 두 번째 할 일이 정해져 있습니다. (인덱스 0, 1, 2…)
- 중복을 허용한다: “공부하기”를 적고, 나중에 또 “공부하기”를 적어도 됩니다.
2. 대표적인 List 친구들
1) ArrayList: “크기가 늘어나는 배열”
- 특징: 배열처럼 생겼지만, 물건을 넣으면 크기가 자동으로 늘어납니다.
- 장점: 데이터를 찾을 때(
get) 가 빠릅니다. (인덱스만 알면 바로 접근) - 단점: 중간에 끼워 넣거나 삭제할 때 느립니다. (뒤에 있는 애들을 한 칸씩 다 옮겨야 해서)
- 비유: “지하철 의자”. 중간에 누가 앉으려면 다 비켜줘야 합니다.
2) LinkedList: “줄줄이 비엔나”
- 특징: 데이터들이 서로 앞뒤로 연결(Link)되어 있습니다.
- 장점: 중간에 끼워 넣거나 삭제할 때 빠릅니다. (연결 고리만 바꿔주면 끝)
- 단점: 데이터를 찾을 때 느립니다. (처음부터 줄을 타고 따라가야 해서)
- 비유: “기차”. 중간 칸을 떼거나 붙이기가 쉽습니다.
3) Vector: “안전 제일 ArrayList”
- 특징:
ArrayList와 똑같지만, 동기화(Synchronized) 기능이 있어 멀티 스레드 환경에서 안전합니다. - 단점: 안전장치 때문에
ArrayList보다 조금 느립니다.
3. 사용법 (공통)
// 생성 (보통 ArrayList를 가장 많이 씁니다)
List<String> list = new ArrayList<>();
// 1. 추가 (add)
list.add("Java");
list.add("Python");
list.add("Java"); // 중복 허용!
// 2. 검색 (get)
String item = list.get(0); // "Java"
// 3. 삭제 (remove)
list.remove(0); // 0번방 삭제 (뒤에 있던 애들이 앞으로 당겨짐)
// 4. 전체 크기 (size)
int size = list.size();
4. 성능 비교 (ArrayList vs LinkedList)
- 읽기(검색)가 많다 ->
ArrayList승! 🏆 - 추가/삭제가 많다 ->
LinkedList승! 🏆
핵심 요약: 데이터의 순서가 중요하고, 중복이 있어도 된다면 무조건 List를 쓰세요. 그 중에서도 ArrayList가 기본입니다.
서브목차