본문 바로가기

JAVA

컬렉션 프레임워크 - 2

- 컬렉션은 여러 데이터를 하나로 묶어 관리하는 데이터의 집합임

- 컬렉션을 효과적으로 다루기 위한 모음이 컬렉션 프레임워크(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