17.1 List 컬렉션


1. 할 일 목록 (To-Do List) 📝

List 컬렉션은 우리가 흔히 쓰는 “할 일 목록”과 같습니다.

  1. 순서가 있다: 첫 번째 할 일, 두 번째 할 일이 정해져 있습니다. (인덱스 0, 1, 2…)
  2. 중복을 허용한다: “공부하기”를 적고, 나중에 또 “공부하기”를 적어도 됩니다.

List Concept Todo



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가 기본입니다.

서브목차