- 컬렉션은 여러 데이터를 하나로 묶어 관리하는 데이터의 집합임
- 컬렉션을 효과적으로 다루기 위한 모음이 컬렉션 프레임워크(Collection Framework)
- 자주 쓰는 기능을 미리 정의해둔 것임. 인터페이스, 구현 클래스, 알고리즘 제공
List : 순서유지, 중복허용 - > ArrayList, LinkedList
Set : 순서없음, 중복불가 -> HashSet, TreeSet
Map : Key-Value 한쌍, Key는 중복불가, Value는 중복가능 -> HashMap, TreeMap
Queue : FIFO구조, 순차처리 -> LinkedList, PriorityQueue (LinkedList는 Deque와 중복되네?)
Deque : 양방향 Queue -> ArrayDeque, LinkedList
Collection이 컬렉션 계열 최상위 인터페이스이고, 하위 인터페이스로 List, Set, Queue가 있다
Collection의 주요 메서드 : add(), remove(), contains(), size(), isEmpty(), iterator() 등
Map은 Collection 인터페이스가 아닌 별개의 인터페이스다.
메서드를 사용하는게 나에게 있어선 가장 중요하다고 생각하니 한번 더 정리한다
객체 추가 : add(Object o), addAll(Collection c) : 객체/컬렉션 추가 - boolean(리턴 타입)
객체 검색 : contains(Object o), containsAll(Collection c) : 포함 여부 확인 - boolean
반복 처리 : iterator() : 순차 접근을 위한 반복자 전환 - iterator
상태 확인 : isEmpty(), size() : 비어있는지 확인, 요소의 개수 확인 - boolean, int
객체 삭제 : clear(), remove(Object o), removeAll(Collection c) : 객체/전체 삭제 - void, boolean
부분 유지 : retainAll(Collection c) : 특정 컬렉션을 제외한 객체 제거 - boolean
배열 변환 : toArray(), toArray(Object[] a) : 배열로 변환함 - Object[]
컬렉션간 변환관계 : 구조적 관계, 유형 변환(?) 가능
List - > Set : 중복 제거 (List는 순서 있음, 중복 가능 / Set은 순서 없음, 중복 불가)
Set - > List : 순서 부여 (Set이어서 순서가 없었는데 List로 바꾸면 배열이 순서대로 나열된다)
Set -> Map : 요소를 Key, Value은 가공된 결과로 저장됨 (Map은 Key-Value, Key는 중복불가이고 Value는 중복가능)
Map -> Set : keySet(), entrySet() 이용?? 유형변환이 가능하다
List -> Map : 특정 기준(인덱스, id 등)을 key로 가공한다 (List는 중복 가능하니까 중복 불가하게)
주석 뺀거
// List에 중복된 요소가 있는데 Set으로 중복을 제거합니다
List<String> list = Arrays.asList("a", "b", "a");
System.out.println(list);
Set<String> set = new HashSet<>(list);
System.out.println(set);
// Set타입에서 Map타입으로 변경해서 Key-Value형태로 전환해줌
Set<String> fruits = Set.of("apple", "banana");
System.out.println(fruits);
Map<String,Integer> fruitMap = fruits.stream()
.collect(Collectors.toMap(f -> f, f -> f.length()));
System.out.println(fruitMap);
// Map타입에서 Set타입으로 변경(keySet 사용?)
Map<String, Integer> map = Map.of("A", 1, "B", 2);
System.out.println(map);
Set<String> keys = map.keySet();
System.out.println(keys);
package 연습문제;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
public class Collection01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// List에 중복된 요소가 있는데 Set으로 중복을 제거합니다
List<String> list = Arrays.asList("a", "b", "a");
System.out.println(list);
Set<String> set = new HashSet<>(list); // HashSet<>()은 Set의 대표적 구현 클래스
System.out.println(set);
// Set타입에서 Map타입으로 변경해서 Key-Value형태로 전환해줌
Set<String> fruits = Set.of("apple", "banana");
// Set을 만드는 방법은 Set.of도 있다
// List<String> list = List.of("apple", "banana");와 같은 방법
System.out.println(fruits);
Map<String,Integer> fruitMap = fruits.stream()
.collect(Collectors.toMap(f -> f, f -> f.length()));
System.out.println(fruitMap);
// 1. Map은 Key,Value값을 가지니까 String,Integer을 저장할 수 있다
// 2. List, Set, Queue, Deque와 다르게 Map은 Collection의 하위클래스가 아니다
// 3. 따라서 stream()을 통해 형변환? 을 해줘야한다. stream()을 사용할 땐 람다식이 필수다!!
// stream을 통해 Map으로 변환한 결과 banana=6, apple=5라고 나왔다.
// 이는 람다식을 통한것. f -> f(key, 중복불가), f -> f.length()(String f의 길이, value, 중복가능)
// Map타입에서 Set타입으로 변경(keySet 사용?)
Map<String, Integer> map = Map.of("A", 1, "B", 2);
// List를 만드는 방법은 List<타입> 이름 = List.of();
// Set을 만드는 방법 Set<타입> 이름 = Set.of();
// Map을 만드는 방법 Map<Key,Value> 이름 = Map.of();
System.out.println(map);
Set<String> keys = map.keySet();
System.out.println(keys);
// Key는 중복 불가능하고 Value는 중복 가능하다.
// Set은 중복 불가하기 때문에 Value를 통한 변환은 안되나보다! 메서드가 없음
}
}
List를 만드는 방법은 List<타입> 이름 = List.of();
혹은 List<타입> 이름 = Arrays.asList();
Set을 만드는 방법 Set<타입> 이름 = Set.of();
혹은 Set<타입> 이름 = new HashSet<>();
Map을 만드는 방법 Map<Key,Value> 이름 = Map.of();
혹은 Map<타입> 이름 = new HashMap<>();
'JAVA' 카테고리의 다른 글
| 객체 직렬화 / 역직렬화 (1) | 2025.06.10 |
|---|---|
| Stram API의 map과 flatMap의 차이점 (0) | 2025.06.08 |
| 단일 책임 원칙(SRP)과 개방-폐쇄 원칙(OCP) (0) | 2025.06.05 |
| List<E> 컬렉션 (0) | 2025.06.04 |
| 컬렉션 프레임워크 - 1 (0) | 2025.06.04 |