Collection Framework
Collection Framework 한눈에 보기
키워드
주요 인터페이스
주요 구현체
주요 메서드
키워드
컬렉션의 이름에 붙은 키워드로 자료구조와 주된 기능을 알 수 있다.
키워드 자료구조/기반 설명 및 특징 유래 Linked 연결 리스트 입력 순서 보장 노드들이 체인처럼 연결된 구조에서 유래함. ‘입력 순서 보장’ 이거 하나만 알면 됨 Tree 이진 탐색 트리 자동 정렬, 검색 컴터과학에서 “계층적”,“트리형 구조” ➡️ {‘자동 정렬’ , ‘범위 탐색이 빠르다’ , ‘최대/최소값 찾기가 빠르다’} Hash 해시테이블 해시값으로 검색/추가/삭제, 순서 보장 X. 맥날 해쉬브라운이 잘게 쪼갠 감자 뭉치라는 의미인 것 처럼 데이터를 잘게 쪼개어서 뭉침→ 순서 보장 x / 감자 쪼가리가 해시값 → 해시값으로 저장,검색 Array 배열 인덱스로 접근, 크기 자동 확장 뜻 ‘배열’ Deque 덱 (양방향 큐) 앞/뒤 양쪽 끝에서 삽입/삭제한다. ‘Double Ended Queue’의 줄임말이다. Set 집합 중복 저장 X. 수학에서의 집합 개념 그대로 가져옴. 수학에서의 집합은 원소의 중복을 허용하지 않음. Map 맵(키-값 쌍) 중복 저장 X. 한 값을 다른 값에 ‘매핑한다’는 개념에서 옴.{ 바늘에 실이 매핑됨 : 키에 값이 매핑됨 } Stack 스택(LIFO) 후입선출, push/pop 등. 영어로 ‘쌓다’ 접시가 쌓여 있으면 가장 마지막에 쌓은 접시가 맨 위에 있고 먼저 쓰임. Queue 큐(FIFO) 선입선출, offer/poll 등. 영어로 ‘선착순 대기줄’이다. Vector 동기화 배열 리스트 스레드 안전 이거 쓸바에 ArrayList나 DequeList 쓰라고 한다.(gpt가) Hashtable 동기화 해시테이블 스레드 안전, null 허용 X 해시값을 표로 관리한다는 의미. 이거쓸바에 HashMap 쓰라고 한다(gpt가).
인터페이스 중복 여부 순서 보장 언제 씀? List< E > ⭕ ⭕ 값이 중복돼도 상관 없고, 순서가 중요할 때 쓴다. Set< E > ❌ 선택 가능 값의 유일성 보장 값이 중복되면 안될 때 쓴다. Map< K , V > key❌
/값⭕
❌ 키의 유일성 보장, key-value 쌍으로 저장 저장되는 데이터의 중복 여부를 취사선택 하고싶을때 쓴다. Deque< E > ⭕ ⭕ 양쪽 끝에서 삽입/삭제 모두 가능 (스택/큐 구조 지원) 처리 속도가 우수해서 요즘 많이 쓴다고 함 ^block-interface 인터페이스별 주요 구현체
인터페이스 구현체 특징/설명 주 기능 & 특징 List< E > ArrayList 배열 기반 인덱스 접근 빠름, 중간 삽입/삭제 느림 LinkedList 연결 리스트 기반 중간 삽입/삭제 빠름, 인덱스 접근 느림 Set< E > HashSet 가장 많이 쓰는 Set 구현체 중복 X, 순서 보장 X, 해시테이블 기반 LinkedHashSet 입력 순서 유지 HashSet에 순서보장만 추가됨. TreeSet 내부적으로 이진 탐색 트리 사용 자동 정렬, 범위 검색에 유리 Map< K , V > HashMap 가장 많이 쓰는 Map 구현체 키 중복 X, 순서 보장 X, 해시테이블 기반 LinkedHashMap 입력 순서 유지 순서가 중요한 경우 사용 TreeMap 내부적으로 이진 탐색 트리 사용 키 기준 자동 정렬, 범위 검색에 유리 Deque< E > ArrayDeque 배열 기반, 크기 자동 확장 스택/큐/덱 모두 지원 인터페이스별 주요 메서드
인터페이스 메서드 설명 List< E > add(E e) 값 추가(맨 뒤에 삽입) add(int idx, E e) 특정 위치에 값 삽입 get(int idx) 인덱스 위치의 값 반환 set(int idx, E e) 인덱스 위치 값 수정 remove(int idx) 인덱스 위치 값 삭제 contains(Object o) 값 존재 여부 확인 size() 저장된 값 개수 isEmpty() 비어있는지 확인 clear() 모든 값 삭제 Set< E > add(E e) 값 추가 (중복X) remove(Object o) 값 삭제 contains(Object o) 값 존재 여부 확인 size() 저장된 값 개수 isEmpty() 비어있는지 확인 clear() 모든 값 삭제 Map< K , V > put(K key, V value) 키-값 쌍 저장/수정 get(Object key) 키로 값 조회 remove(Object key) 키로 값 삭제 containsKey(Object key) 키 존재 여부 확인 containsValue(Object value) 값 존재 여부 확인 size() 저장된 쌍 개수 isEmpty() 비어있는지 확인 clear() 모든 쌍 삭제 Deque< E > addFirst(E e), addLast(E e) 앞/뒤에 값 추가 removeFirst(), removeLast() 앞/뒤에서 값 삭제 peekFirst(), peekLast() 앞/뒤 값 조회(삭제X) offerFirst(E e), offerLast(E e) 앞/뒤에 값 삽입(실패 시 false) pollFirst(), pollLast() 앞/뒤에서 값 꺼내오기(없으면 null) push(E e), pop() 스택처럼 사용 (LIFO) size() 저장된 값 개수 isEmpty() 비어있는지 확인 clear() 모든 값 삭제
Set< E >
영어로 집합임. “***병장님께서 집합하시랍니다”가 아니라 수학에서 말하는 집합이며 수학에서의 집합 개념 그대로 가져옴.
수학에서 집합은 중복되는 원소를 허용하지 않습니다. 즉, 집합 내의 원소는 각각 유일해야 합니다.
만약 중복되는 원소가 있다면, 그 원소는 집합에서 한 번만 나타납니다.
예를 들어, {1, 2, 2, 3} 과 같은 표현은 수학적으로 {1, 2, 3}과 동일하게 간주됩니다.
즉, 같은 값이 여러 번 들어가도 한 번만 저장된다.
- 중복 없는 데이터 저장이 필요할 때 Set을 쓴다.
- 저장 순서가 중요하지 않거나, 값의 존재 여부만 빠르게 확인하고 싶을 때도 Set이 좋다. 하지만
LinkedHashSet<>
쓰면 저장 순서 보장됨.