🧩 1. String (불변 객체)
문자열을 다루는 클래스 (java.lang.String)
- length(): 문자열 길이 반환
- charAt(int index): 특정 인덱스 문자 반환
- indexOf(String s) / lastIndexOf(String s): 특정 문자(열) 위치 찾기
- substring(int begin, int end) / substring(int begin): 부분 문자열 추출 (begin ~ end-1 / begin ~ 끝까지)
- toLowerCase() / toUpperCase(): 대소문자 변환
- contains(String s): 포함 여부 확인
- startsWith() / endsWith(): 접두사, 접미사 검사
- split(String regex): 구분자로 분리해 String[] 반환
- replace() / replaceAll() / replaceFirst(): 문자열 치환
- trim(): 앞뒤 공백 제거
- isEmpty() / isBlank() (Java 11+): 비어 있거나 공백만 있는지 검사
- equals(Object obj): 문자열 내용 비교 (==는 주소 비교 주의)
- equalsIgnoreCase(String s): 대소문자 무시 비교
주의: String은 불변(Immutable) → 수정 시 새 객체 생성
문자열을 반복 연결할 땐 StringBuilder를 사용해야 성능 저하를 방지할 수 있음
🧱 2. StringBuilder (가변 문자열)
문자열을 자주 수정/결합할 때 효율적 (thread-safe 아님)
String과 동일한 메서드:
- length()
- charAt(index)
- indexOf(str) / lastIndexOf(str)
- substring(int start, int end) / substring(int start)
StringBuilder만 가지는 메서드:
- append(Object obj): 문자열 뒤에 추가
- setLength(int newLength): 문자열 길이 제한 (처음부터 해당 길이까지만 남김)
- setCharAt(int index, char ch): 특정 인덱스 문자 치환
- deleteCharAt(int index): 특정 인덱스 문자 삭제
- delete(int start, int end): 부분 삭제
- insert(int offset, Object obj): 특정 위치에 삽입
- replace(int start, int end, String str): 구간 교체
- reverse(): 문자열 뒤집기
- toString(): 최종 문자열로 변환
반복문에서 문자열 결합 시 StringBuilder 필수
멀티스레드 환경이라면 StringBuffer 사용
📋 3. List 인터페이스 (ArrayList, LinkedList 등)
순서가 있고, 중복을 허용하는 컬렉션
공통 메서드 (java.util.List):
- size(): 리스트 크기 반환
- get(int index): 요소 조회
- add(E e) / add(int index, E e) / addAll(Collection<?> c): 요소 추가
- set(int index, E e): 요소 수정
- remove(int index) / remove(Object o) / removeAll(Collection<?> c): 삭제 (첫 번째로 나타나는 요소)
- contains(Object o): 포함 여부
- indexOf(Object o) / lastIndexOf(Object o): 위치 검색
- isEmpty(): 비었는지 확인
- clear(): 전체 삭제
- sort(Comparator<? super E> c): 정렬
- toArray(): 객체(Object[]) 배열로 변환
ArrayList 특징: 내부적으로 배열 기반 → 접근 빠름 (O(1)), 삽입/삭제 느림 (O(n))
LinkedList 특징: 노드 기반 연결 구조 → 접근 느림 (O(n)), 삽입/삭제 빠름 (O(1))
🧰 4. Collections (유틸리티 클래스)
컬렉션(List, Set, Map 등)을 다루는 정적 메서드 집합 (java.util.Collections)
- sort(List list) : 오름차순 정렬
- sort(List list, Comparator<? super T> c) : 사용자 정의 정렬
- reverse(List<?> list) : 순서 반전
- binarySearch(List<?> list, T key): 이진 탐색 (정렬된 상태 필요)
- shuffle(List<?> list) : 무작위 섞기
- min(Collection<? extends T> coll) / max() : 최솟값, 최댓값
- frequency(Collection<?> c, Object o) : 특정 요소 개수
- unmodifiableList(list) : 불변 리스트 반환
- synchronizedList(list) : 스레드 안전 래퍼 반환
📦 5. Arrays (배열 유틸리티 클래스)
배열 관련 정적 메서드 제공 (java.util.Arrays)
- fill(T[] a, T val) : 모든 요소를 동일 값으로 채움
- sort(T[] a) : 배열 정렬
- binarySearch(T[] a, T key) : 이진 탐색 (정렬된 상태 필요)
- copyOf(T[] original, int newLength) : 크기 변경 복사
- copyOfRange(T[] original, int from, int to) : 부분 복사
- equals(T[] a, T[] b) : 배열 내용 비교
- toString(T[] a) : 배열 문자열 변환
- stream(T[] a) : Stream 변환 (Java 8+)
🪜 6. Stack (LIFO 구조)
java.util.Stack<E> (Vector 상속, 동기화됨)
- push(E item) : 요소 삽입
- pop() : 맨 위 요소 꺼내기
- peek() : 맨 위 요소 조회 (삭제 X)
- empty() : 비었는지 확인
- search(Object o) : 위치 검색 (1부터 시작)
주의: Stack은 오래된 클래스 → Deque (ArrayDeque) 사용 권장
🧮 7. Queue (FIFO 구조)
일반적으로 LinkedList, ArrayDeque로 구현
- add(E e) : 삽입 (실패 시 예외 발생)
- offer(E e) : 삽입 (실패 시 false 반환)
- remove() : 맨 앞 요소 제거 (비어있으면 예외)
- poll() : 맨 앞 요소 제거 및 반환 (비어있으면 null)
- element() : 맨 앞 요소 조회 (예외 발생 가능)
- peek() : 맨 앞 요소 조회 (null 반환 가능)
우선순위 큐 (PriorityQueue)의 경우 자동 정렬됨 (기본은 오름차순)
🗺️ 8. Map (Key-Value 구조)
키 중복 불가, 값은 중복 가능 (대표: HashMap, LinkedHashMap, TreeMap)
공통 메서드:
- put(K key, V value) : 키-값 삽입/수정
- putIfAbsent(K key, V value) : 값이 없을 때만 삽입
- get(Object key) : 키로 값 조회
- getOrDefault(K key, V defaultValue) : 키 없을 때 기본값 반환
- remove(Object key) : 키로 삭제
- keySet() : 키 집합(Set<K>) 반환
- values() : 값 목록(Collection<V>) 반환
- entrySet() : 키-값 쌍(Set<Map.Entry<K,V>>) 반환
- containsKey(Object key) : 키 포함 여부
- containsValue(Object v) : 값 포함 여부
- computeIfAbsent(K key, Function mappingFunction) : 키가 없으면 값을 계산해서 넣고 반환 (있으면 기존 값을 반환)
- replace(K key, V newValue) : 값 교체
- size() : 크기 반환
- isEmpty() : 비었는지 확인
HashMap: 빠름 (O(1)), 순서 없음
LinkedHashMap: 삽입 순서 유지
TreeMap: 자동 정렬 (Red-Black Tree 기반)
🌿 9. Set (중복 없는 집합)
HashSet, LinkedHashSet, TreeSet
공통 메서드:
- add(E e) : 요소 추가
- remove(Object o) : 삭제
- contains(Object o) : 포함 여부
- isEmpty() / size()
- clear() : 전체 삭제
- iterator() : 반복자 반환
HashSet: 순서 X, 중복 제거
LinkedHashSet: 삽입 순서 유지
TreeSet: 자동 정렬 (이진 탐색 트리 기반)
'Java' 카테고리의 다른 글
| [Java] 배열(Array)과 컬렉션(Collection)의 정렬 방식 (0) | 2025.10.10 |
|---|---|
| [Java] List<Integer> ↔ int[] 변환 방법 (0) | 2025.10.08 |
| [Java] 진법 변환 (10진수 ↔ n진수) (0) | 2025.09.30 |
| [Java] 자바의 예외 – 체크 예외 vs 언체크 예외 (2) | 2025.09.23 |
| [Java] 컬렉션 순회 중 발생하는 ConcurrentModificationException (0) | 2025.09.03 |