본문 바로가기

Java

[Java] 주요 자료구조 클래스의 핵심 메서드

🧩 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: 자동 정렬 (이진 탐색 트리 기반)