[Algorithm] 코테에서 자주 쓰이는 Collection 모음

코딩테스트 대비 JAVA Collections의 사용처 및 메서드를 정리해보았습니다.

  1. HashMap
  2. HashSet
  3. ArrayList
  4. PriorityQueue
  5. Stack / Queue
  6. Collections / Arrays
  7. 추천 연습문제 유형별 활용 예시

🗂️ 1️⃣ HashMap<K, V> — key-value 형태로 빠르게 찾고 세는 용도

💡 핵심 활용 상황

  • “이 값이 몇 번 나왔는가?”
  • “이 key가 이미 존재하나?”
  • “카테고리별 개수 세기 (위장 문제 등)”

🚀 자주 쓰는 메서드

메서드설명예시 코드
put(K key, V value)값 삽입 (덮어씀)map.put("apple", 3);
get(K key)key로 value 조회int v = map.get("apple");
getOrDefault(K key, V defaultVal)key 없으면 기본값 반환map.getOrDefault("pear", 0);
containsKey(K key)key 존재 여부if (map.containsKey("apple"))
remove(K key)key/value 쌍 삭제map.remove("apple");
keySet()모든 key 조회for (String k : map.keySet())
values()모든 value 조회for (int v : map.values())
entrySet()key+value 동시 접근`for (Map.Entry<String, Integer> e : map.entrySet()) {
 System.out.println(e.getKey() + " → " + e.getValue());

}| |size()| 원소 수 |map.size();| |clear()| 모두 삭제 |map.clear();` |


🧩 2️⃣ HashSet — 중복 없는 데이터 저장

💡 핵심 활용 상황

  • “이미 나온 적 있는 값인가?”
  • “교집합, 중복 제거”
  • “전화번호부 접두사, 참가자 중 완주 못한 사람 찾기 등”

🚀 자주 쓰는 메서드

메서드설명예시 코드
add(E e)원소 추가set.add("apple");
contains(E e)포함 여부 확인if (set.contains("apple"))
remove(E e)원소 삭제set.remove("apple");
size()원소 개수set.size();
clear()모두 삭제set.clear();
isEmpty()비었는지 확인if (set.isEmpty())
iterator()순회용 Iterator 생성for (String s : set) System.out.println(s);

or Iterator<String> it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } |

💡 참고: HashSet은 내부적으로 HashMap을 사용하므로 add, contains 모두 O(1)입니다.


📋 3️⃣ ArrayList — 순서 있는 리스트 (인덱스 접근 가능)

💡 핵심 활용 상황

  • “순차적 접근”, “정렬”, “조합/순열 저장”
  • BFS/DFS에서 방문 순서 저장 등

🚀 자주 쓰는 메서드

메서드설명예시 코드
add(E e)끝에 추가list.add(5);
add(int idx, E e)인덱스에 삽입list.add(1, 10);
get(int idx)특정 인덱스 조회list.get(0);
set(int idx, E e)특정 위치 값 수정list.set(2, 99);
remove(int idx)인덱스로 삭제list.remove(1);
contains(E e)포함 여부if (list.contains(5))
size()크기 확인list.size();
clear()모두 삭제list.clear();
sort(Comparator<? super E> c)정렬`Arrays.sort(arr, new Comparator() {
        @Override
        public int compare(String o1, String o2) {
            if (o1.length()==o2.length()) {
                return o1.compareTo(o2);
            } else {
                return o1.length()-o2.length();
            }}});` |

🧮 4️⃣ PriorityQueue — 우선순위 큐 (힙)

💡 핵심 활용 상황

  • “가장 작은/큰 값”을 반복적으로 꺼낼 때 (Dijkstra, HeapSort, 스케줄링 문제 등)

🚀 자주 쓰는 메서드

메서드설명예시 코드
add(E e)원소 추가pq.add(10);
peek()최상단 원소 확인(삭제 안 함)int top = pq.peek();
poll()최상단 원소 꺼내기int top = pq.poll();
isEmpty()비었는지 확인if (pq.isEmpty())

💡 디폴트는 오름차순(최소 힙) → 작은 숫자가 먼저 나옴

내림차순은 new PriorityQueue<>(Collections.reverseOrder());


🧰 5️⃣ Stack / Queue (Deque) — 선형 구조

💡 Queue

Queue<Integer> q = new LinkedList<>();

💡 Stack (Deque로 대체 권장)

Deque<Integer> stack = new ArrayDeque<>();

💎 6️⃣ Collections / Arrays 유틸리티 메서드

클래스메서드설명
Collections.sort(list)리스트 정렬 
Collections.reverse(list)역순 정렬 
Collections.max(list)최댓값 
Collections.min(list)최솟값 
Arrays.sort(arr)배열 정렬 
Arrays.equals(arr1, arr2)배열 비교 
Arrays.toString(arr)배열 출력용 

📘 추천 연습문제 유형별 활용 예시

유형핵심 자료구조/메서드예시 문제
Hash (중복, 완주하지 못한 선수 등)HashMap, HashSetmap.getOrDefault, set.contains
Stack/QueueDeque, LinkedList괄호 검사, 기능개발
정렬Arrays.sort, Collections.sortH-index, K번째 수
이중 루프 회피HashMap lookup전화번호 목록
우선순위 문제PriorityQueue더 맵게, 디스크 컨트롤러
그래프/BFS/DFSQueue, ArrayList미로 탐색, 네트워크