728x90
코테 풀 때마다 계속 까먹어서 이번 기회에 정리하고자 합니다.

0. import
자바에서 기본적으로 많이 사용하는 패키지. 미리 선언해두고 들어가면 편합니다.
import java.io.*; // 입출력 관련 (BufferedReader, InputStream 등)
import java.util.*; // 컬렉션, Scanner, Arrays, List, Map, Set 등
1. String
String str = "hello";
// 길이
str.length(); // 5
// 특정 문자
str.charAt(1); // 'e'
// 부분 문자열
str.substring(1, 4); // "ell"
// 찾기
str.indexOf("l"); // 2 (첫 번째 l 위치)
str.contains("he"); // true
// 문자 배열 변환
str.toCharArray(); // {'h', 'e', 'l', 'l', 'o'} (char[] 배열로 변환)
// 대소문자 변환
str.toUpperCase(); // "HELLO"
str.toLowerCase(); // "hello"
// 분리 & 합치기
String[] arr = str.split(""); // {"h","e","l","l","o"}
String joined = String.join("-", arr); // "h-e-l-l-o"
// 문자열 비교 (문자열 비교는 ==으로 하면 안됨)
str.equals("값"); // 값 비교
str.equalsIgnoreCase("HELLO"); // 대소문자 무시 비교
str.compareTo("hello"); // 0 (같음)
str.compareTo("world"); // 음수 / 양수 (사전순 비교)
// 문자열 치환
str.replace("l", "x"); // "hexxo"
str.replaceFirst("l", "X"); // "heXlo"
str.replaceAll("[aeiou]", "*"); // 정규식 사용 → "h*ll*"
// 문자열 시작 / 끝 검사
str.startsWith("he"); // true
str.endsWith("lo"); // true
// 빈 문자열 체크
str.isEmpty(); // false (길이 == 0)
// 문자열 반복 (Java 11+)
"ab".repeat(3); // "ababab"
// 문자 ↔ 아스키(유니코드)
char c = 'a';
int code = c; // 97
char next = (char)(c + 1); // 'b'
// 문자열 포맷팅
String fmt = String.format("이름:%s 나이:%d", "철수", 20);
// "이름:철수 나이:20"
// 문자열 → 숫자 변환
Integer.parseInt("123"); // 123
Long.parseLong("123"); // 123L
Double.parseDouble("3.14"); // 3.14
Integer.parseInt("1010", 2); // 10 (2진수 → 10진수)
// 문자열 정렬
char[] chArr = str.toCharArray();
Arrays.sort(chArr);
String sorted = new String(chArr); // "ehllo"
//문자열 변환
str.toString();
// 자기 자신("hello")을 그대로 반환
// (String 객체라면 의미 없음, 다른 객체에서 주로 사용)
String.valueOf(123);
// "123" (int → String)
String.valueOf(true);
// "true" (boolean → String)
String.valueOf(str);
// "hello" (String 그대로 반환)
String.valueOf(null);
// "null" (toString()은 NullPointerException 터지지만 valueOf는 안전)
// StringBuilder (문자열 문제 핵심)
StringBuilder sb = new StringBuilder("abc");
sb.append("d"); // "abcd"
sb.insert(1, "X"); // "aXbcd"
sb.delete(1, 3); // "acd"
sb.reverse(); // "dca"
sb.setCharAt(0, 'Z'); // "Zca"
sb.length(); // 길이
2. Array (배열)
import java.util.Arrays;
int[] arr = {5, 2, 9, 1};
// 길이
arr.length; // 4
// 정렬
Arrays.sort(arr); // {1,2,5,9}
// 문자열 변환
Arrays.toString(arr); // "[1, 2, 5, 9]"
// 채우기
Arrays.fill(arr, 7); // {7,7,7,7}
// 복사
int[] arr2 = Arrays.copyOf(arr, 2); // {7,7}
// 부분 복사 (범위 복사)
int[] sub = Arrays.copyOfRange(arr, 1, 3);
// index 1 ~ 2까지 복사 (end 미포함)
// 배열 비교
Arrays.equals(arr, arr2); // true / false
// 배열 전체 같은 값인지 확인할 때 많이 씀
// 배열 깊은 비교 (2차원 이상)
int[][] a = {{1,2},{3,4}};
int[][] b = {{1,2},{3,4}};
Arrays.deepEquals(a, b); // true
// 2차원 배열 출력
Arrays.deepToString(a); // "[[1, 2], [3, 4]]"
// 배열에서 값 찾기 (이진 탐색)
// ⚠ 정렬된 배열에서만 가능
Arrays.sort(arr);
int idx = Arrays.binarySearch(arr, 9); // index 반환
int idx2 = Arrays.binarySearch(arr, 100); // 없으면 음수 반환
// 배열을 리스트로 변환 (Integer 배열만 가능)
Integer[] nums = {1, 2, 3};
Arrays.asList(nums); // List<Integer>
// 배열 스트림 변환 (합, 최대값 구하기 가능)
int sum = Arrays.stream(arr).sum(); // 합
int max = Arrays.stream(arr).max().getAsInt(); // 최대
int min = Arrays.stream(arr).min().getAsInt(); // 최소
// 배열 출력 반복 (디버깅용)
for (int x : arr) {
System.out.print(x + " ");
}
// 배열 뒤집기 (직접 구현 필요)
for(int i = 0; i < arr.length / 2; i++){
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
// 배열에 값 추가하기 (새 배열 생성 필요)
int[] newArr = new int[arr.length + 1];
for(int i=0;i<arr.length;i++){
newArr[i] = arr[i];
}
newArr[arr.length] = 10; // 마지막에 추가
// 배열에서 특정 조건 필터링 (stream 활용)
int[] evenArr = Arrays.stream(arr)
.filter(x -> x % 2 == 0)
.toArray();
// 배열 합치기 (stream 활용)
int[] arrA = {1,2};
int[] arrB = {3,4};
int[] merged = Arrays.stream(
new int[][]{arrA, arrB})
.flatMapToInt(Arrays::stream)
.toArray();
// {1,2,3,4}
// 배열 값 변경 (map 활용)
int[] doubled = Arrays.stream(arr)
.map(x -> x * 2)
.toArray();
// 배열 초기화 (2차원 배열)
int[][] board = new int[3][4];
for(int i=0;i<3;i++){
Arrays.fill(board[i], 1);
}
// 모든 값을 1로 초기화
3. List / ArrayList
// 1. 선언
ArrayList<String> list = new ArrayList<>();
// 2. 삽입
list.add("java"); // {"java"}
list.add(0, "ryu"); // {"ryu", "java"}
// 3. 수정
list.set(1, "c++"); // {"ryu", "c++"}
// 4. 삭제
list.remove(1); // {"ryu"}
// 5. 값 존재 유무
list.contains("java"); // false
list.indexOf("ryu"); // 0
// 6. 순회 (Iterator)
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
4. Collections
ArrayList<Integer> nums = new ArrayList<>(Arrays.asList(5, 1, 4, 2));
// 정렬
Collections.sort(nums); // {1,2,4,5}
// 역순 정렬
Collections.sort(nums, Collections.reverseOrder()); // {5,4,2,1}
// 최대/최소
Collections.max(nums); // 5
Collections.min(nums); // 1
// 이진 탐색 (정렬된 상태 필요)
Collections.sort(nums); // {1,2,4,5}
Collections.binarySearch(nums, 4); // 2
5. Stack
Stack<Integer> stack = new Stack<>();
stack.push(10); // {10}
stack.push(20); // {10,20}
stack.pop(); // 20 제거, {10}
stack.peek(); // 10 (맨 위 확인)
stack.isEmpty(); // false
6. Queue (LinkedList 사용)
Queue<String> q = new LinkedList<>();
q.add("A");
q.add("B");
q.offer("C"); // 추가
q.poll(); // "A" 꺼내고 제거
q.peek(); // "B" (맨 앞 원소 확인)
q.isEmpty(); // false
7. HashMap
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.put("banana", 5);
map.put("apple", 7); // Key 중복 시 Value 덮어씀
map.get("apple"); // 7
map.containsKey("banana"); // true
map.containsValue(5); // true
map.remove("banana"); // {"apple"=7}
// 순회
for (String key : map.keySet()) {
System.out.println(key + " → " + map.get(key));
}
8. HashSet
HashSet<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 중복 저장 X
set.contains("A"); // true
set.remove("B"); // {"A"}
// 순회
for (String s : set) {
System.out.println(s);
}
9. Math
Math.PI // 3.141592653589793
Math.E // 2.718281828459045
Math.abs(-10); // 10
Math.abs(3.14); // 3.14
Math.max(5, 10); // 10
Math.min(5, 10); // 5
Math.ceil(3.14); // 4.0 (올림)
Math.floor(3.99); // 3.0 (내림)
Math.round(3.5); // 4 (반올림, long 리턴)
Math.round(3.49); // 3
Math.pow(2, 3); // 8.0 (2의 3제곱)
Math.sqrt(16); // 4.0 (제곱근)
Math.random(); // 0.0 이상 1.0 미만의 double 난수
// 예: 1~10 랜덤 정수
int r = (int)(Math.random() * 10) + 1;
Math.random(); // 0.0 이상 1.0 미만의 double 난수
// 예: 1~10 랜덤 정수
int r = (int)(Math.random() * 10) + 1;
Math.log(Math.E); // 1.0 (자연로그)
Math.log10(100); // 2.0 (밑 10 로그)
Math.exp(1); // e^1 = 2.718...
Collection 관련 정리

Collection 인터페이스는 List, Set, Queue로 크게 3가지 상위 인터페이스로 분류할 수 있다. Map의 경우 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류된다
⭐ 1. Collection 인터페이스의 특징
| 인터페이스 | 구현 | 클래스 |
| Set | HashSet TreeSet |
순서를 유지하지 않는 데이터의 집합으로, 데이터의 중복을 허용하지 않는다. |
| List | ArrayList LinkedList Vector Stack |
순서가 있는 데이터의 집합으로, 데이터의 중복을 허용한다. |
| Queue | LinkedList PriorityQueue |
List와 유사 |
| Map | Hashtable HashMap TreeMap |
키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며 Key는 중복 불가, Value는 중복 허용. |
⭐ 2. Collection 인터페이스 주요 메소드
| int size() | 컬렉션에 포함된 원소(요소)의 개수를 반환 |
| boolean isEmpty() | 컬렉션이 비어 있는지 확인 |
| boolean contains(Object o) | 특정 원소가 컬렉션에 포함되어 있는지 확인 |
| Iterator<E> iterator() | 컬렉션을 순회할 수 있는 Iterator 객체 반환 |
| boolean add(E e) | 원소를 컬렉션에 추가 (성공 시 true 반환) |
| boolean remove(Object o) | 특정 원소를 컬렉션에서 제거 |
| void clear() | 컬렉션의 모든 원소 제거 |
| Object[] toArray() | 컬렉션을 배열로 변환 |
| <T> T[] toArray(T[] a) | 지정된 타입의 배열로 컬렉션을 변환 |
| boolean containsAll(Collection<?> c) | 주어진 컬렉션의 모든 원소가 포함되어 있는지 확인 |
| boolean addAll(Collection<? extends E> c) | 주어진 컬렉션의 모든 원소를 추가 |
| boolean removeAll(Collection<?> c) | 주어진 컬렉션의 모든 원소 제거 |
| boolean retainAll(Collection<?> c) | 주어진 컬렉션에 있는 원소만 남기고 나머지는 제거 |
*E는 컬렉션에 들어 있는 요소의 타입
⭐ 3. Iterator 인터페이스 주요 메소드
| boolean hasNext() | 다음 원소가 있는지 확인 |
| E next() | 다음 원소 반환 (커서 이동) |
| void remove() | 마지막으로 반환된 원소 제거 |
import java.util.*;
public class Main {
public static void main(String[] args) {
// ArrayList는 Collection 인터페이스를 구현한 클래스
Collection<String> list = new ArrayList<>();
// 1. add() : 요소 추가
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// 2. size(), isEmpty()
System.out.println("크기: " + list.size()); // 3
System.out.println("비었는가? " + list.isEmpty()); // false
// 3. contains()
System.out.println("Banana 포함? " + list.contains("Banana")); // true
// 4. toArray()
Object[] arr = list.toArray();
System.out.println("배열[0]: " + arr[0]); // Apple
// 5. remove()
list.remove("Banana");
System.out.println("Banana 제거 후: " + list);
// 6. iterator() 사용
Iterator<String> it = list.iterator();
System.out.print("Iterator 순회: ");
while (it.hasNext()) {
String fruit = it.next();
System.out.print(fruit + " ");
}
System.out.println();
// 7. clear()
list.clear();
System.out.println("모두 삭제 후 크기: " + list.size()); // 0
}
}
728x90
'{Algortihm}' 카테고리의 다른 글
| [알고리즘] 문자 및 숫자 알파벳 변환 정리 (0) | 2025.09.25 |
|---|---|
| [알고리즘] BFS 너비 우선 탐색 (0) | 2025.09.16 |
| [알고리즘] 백트래킹 (Backtracking) (0) | 2025.09.11 |
| [알고리즘] DFS 깊이 우선 탐색 (3) | 2025.07.30 |