List, Set, Map과 제네릭, 순회, 자주 쓰는 메서드를 다룬다.
컬렉션 프레임워크
여러 데이터를 한데 모아 다룰 때 배열보다 편리한 것이 컬렉션입니다. 크기가 자동으로 늘고, 추가/삭제/검색 메서드가 풍부합니다. List, Set, Map이 가장 많이 쓰이는 세 가지입니다.
학습 목표
List/ArrayList로 순서 있는 데이터를 다룬다.Set/HashSet으로 중복 없는 데이터를 다룬다.Map/HashMap으로 키-값 쌍을 다룬다.- 제네릭과 순회 방법을 이해한다.
List와 ArrayList
List는 순서가 있고 중복을 허용하는 컬렉션입니다. 가장 많이 쓰는 구현체가 ArrayList입니다. <> 안에 담을 타입을 적는 것이 제네릭입니다.
import java.util.ArrayList;
import java.util.List;
List<String> names = new ArrayList<>();
names.add("홍길동");
names.add("김철수");
names.add("홍길동"); // 중복 허용
System.out.println(names.size()); // 3
System.out.println(names.get(0)); // 홍길동
names.remove("김철수");
System.out.println(names); // [홍길동, 홍길동]
💡 TIP — 제네릭
<String>을 지정하면 다른 타입을 넣으려 할 때 컴파일러가 막아 줍니다. 꺼낼 때 형변환도 필요 없습니다.
Set과 HashSet
Set은 중복을 허용하지 않습니다. 같은 값을 여러 번 넣어도 하나만 저장됩니다. HashSet은 순서를 보장하지 않습니다.
import java.util.HashSet;
import java.util.Set;
Set<String> tags = new HashSet<>();
tags.add("java");
tags.add("backend");
tags.add("java"); // 무시됨
System.out.println(tags.size()); // 2
System.out.println(tags.contains("java")); // true
Map과 HashMap
Map은 키와 값을 쌍으로 저장합니다. 키로 값을 빠르게 찾을 수 있습니다.
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> scores = new HashMap<>();
scores.put("홍길동", 90);
scores.put("김철수", 85);
System.out.println(scores.get("홍길동")); // 90
System.out.println(scores.containsKey("김철수")); // true
System.out.println(scores.getOrDefault("이영희", 0)); // 0 (없으면 기본값)
⚠️ 주의 —
Map에서 없는 키를get하면null이 반환됩니다. 기본값이 필요하면getOrDefault를 사용해NullPointerException을 피하세요.
순회하기
향상된 for문으로 컬렉션을 순회합니다. Map은 entrySet()으로 키와 값을 함께 꺼냅니다.
for (String name : names) {
System.out.println(name);
}
for (Map.Entry<String, Integer> e : scores.entrySet()) {
System.out.println(e.getKey() + ": " + e.getValue());
}
자주 쓰는 메서드
| 메서드 | 설명 |
|---|---|
add(e) / put(k,v) | 요소 추가 |
get(i) / get(k) | 요소 조회 |
remove(e) | 요소 삭제 |
size() | 개수 |
contains(e) | 포함 여부 |
isEmpty() | 비었는지 |
요약
List는 순서 있고 중복 허용,ArrayList가 대표 구현체입니다.Set은 중복을 허용하지 않습니다.Map은 키-값 쌍을 저장하고 키로 값을 찾습니다.- 제네릭
<>으로 담을 타입을 지정해 안전성을 높입니다. - 없는 키 조회 시
getOrDefault로 null을 피할 수 있습니다.
연습문제
List<Integer>에 1~5를 넣고 합계를 구하세요.Set을 사용해 중복된 단어를 제거하세요.Map<String, Integer>로 이름별 점수를 저장하고 특정 이름의 점수를 조회하세요.Map을 순회하며 모든 키와 값을 출력하세요.
힌트 — 합계는 향상된 for문으로 누적합니다.
💡 연습문제 풀이
불러오는 중…
댓글 0
“Java” 강좌에 대한 댓글입니다.