Java (10) 썸네일형 리스트형 [Java] 컬렉션 순회 중 발생하는 ConcurrentModificationException 🧩 개념발생 시점: 컬렉션(Collection)을 Iterator 또는 foreach(내부적으로 Iterator 사용)로 순회하는 도중, 해당 컬렉션의 구조적 변경(Structural Modification)이 감지되면 발생함구조적 변경(Structural Modification): 컬렉션의 크기나 구조에 영향을 주는 작업요소 추가/삭제, 내부 배열 크기 변경 등단순히 요소 값을 수정하는 것은 구조적 변경이 아님 🔎 발생 원리Java 컬렉션(ArrayList, HashMap 등)의 대부분은 fail-fast iterator를 사용함fail-fast iterator는 내부적으로 modCount라는 변경 횟수 카운터를 유지함컬렉션이 구조적으로 변경될 때마다 modCount 증가Iterator 생성 시점의.. [Java] >>(산술 시프트)와 >>>(논리 시프트)의 차이 (2의 보수와 오버플로우) 두 방식의 차이는 2의 보수 방식과 부호 비트를 이해하면 자연스럽게 알 수 있다. 자바의 정수는 "2의 보수 체계"를 사용한다.자바에서 int, long 같은 정수형 타입은 내부적으로 2의 보수 방식으로 음수를 표현한다.이는 컴퓨터가 음수를 표현하고 계산하기 위한 표준 이진수 체계다. 🤔 왜 2의 보수 방식을 쓰는가?음수 표현 방식 중 하나인 부호-절대값 방식(기호 비트 따로 두기)은 연산 회로가 복잡하다는 단점이 존재한다.반면, 2의 보수는 덧셈과 뺄셈을 동일한 방식으로 처리할 수 있어 연산이 단순하고, 하드웨어 구현도 쉽다는 장점이 존재한다. 🧮 2의 보수 만드는 방법2의 보수 = 1의 보수(비트 반전) + 1 예제: -5를 8비트 2의 보수로 표현5의 이진수: 000001011의 보수 (비트 .. [Java] Arrays.binarySearch()와 Collections.binarySearch()의 차이 Java의 Arrays.binarySearch()와 Collections.binarySearch()는 이진 탐색(binary search) 알고리즘을 기반으로 하는 대표적인 메서드로, 정렬된 데이터에서 특정 값을 빠르게 탐색하는 데 사용된다. 하지만 자료형에서 오는 차이점이 존재한다. 🔍 공통점이진 탐색 기반으로, 시간 복잡도가 O(log N)이다.반드시 정렬된 상태의 배열/컬렉션에서만 정상적으로 동작한다.탐색 실패 시 음수 값을 반환한다.-(삽입될 위치) - 1 형태로 반환된다. ⚖️ 차이점항목Arrays.binarySearch()Collections.binarySearch()대상 자료형배열 (int[], Object[] 등)List (예: ArrayList)제네릭 지원제한적 (Object[]만 제네.. [Java] 자바 자료구조 및 주요 메서드 정리 Java에서 자주 사용하는 문자열, 리스트, 컬렉션, 스택, 큐, 셋, 맵 관련 메서드를 정리해보자. 📜 1. String (불변 문자열) String은 불변(immutable)이라 연산이 많으면 StringBuilder를 쓰는 게 효율적!s.length()문자열 길이 반환s.charAt(i)i번째 문자 반환s.substring(start, end)start ~ end-1 부분 문자열 반환 (end 미지정시 start ~ 끝까지)s.indexOf(str)str이 처음 등장하는 위치 반환 (없으면 -1)s.lastIndexOf(str)str이 마지막으로 등장하는 위치 반환 (없으면 -1)s.contains(str)str 포함 여부 (true or false)s.equals(str)문자열 비교 (==은 .. [Java] StringBuilder 메서드 정리 📌 StringBuilder에서 주로 사용하는 메서드 정리StringBuilder는 문자열을 수정할 수 있는 객체로, String보다 문자열 변경 작업에서 훨씬 효율적이다. 1️⃣ append(String s)문자열을 뒤에 추가한다.+ 연산자를 여러 번 사용할 경우보다 성능이 좋다.✅ 시간 복잡도: O(1) 🔹 예제StringBuilder sb = new StringBuilder("Hello");sb.append(" World!");System.out.println(sb); // "Hello World!" 2️⃣ insert(int index, String s)특정 위치에 문자열을 삽입한다.기존 문자는 뒤로 밀린다.✅ 시간 복잡도: O(N) 🔹 예제StringBuilder sb = new Strin.. [Java] 진법 변환 n진법 → 10진법Integer.parseInt(str, n)으로 변환하면 된다.String str = "1010";// 2진수 -> 10진수int i1 = Integer.parseInt(str, 2);// 8진수 -> 10진수int i2 = Integer.parseInt(str, 8);// 16진수 -> 10진수int i3 = Integer.parseInt(str, 16);10진법 → n진법Integer.toString(i, n)으로 변환하면 된다.int i = 10;// 10진수 -> 2진수String s1 = Integer.toBinaryString(i);String s2 = Integer.toString(i, 2);// 10진수 -> 8진수String s3 = Integer.toOctalStrin.. [Java] BufferedWriter 기본적으로 자바에서 출력할 때는 System.out.println()으로도 충분하다. 하지만 출력할 일이 많을 때는 시간이 오래 걸린다.그럴 때 사용하기 좋은 것이 바로 BufferedWriter이다. 백준 15552번의 풀이를 예제로 보자.import java.io.*;import java.util.*;class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(S.. [Java] String 클래스의 substring() 메서드 String 클래스의 substring() 메서드에는 2가지의 종류가 있다. public String substring(int beginIndex) { return substring(beginIndex, length());} 지정된 인덱스의 문자부터 문자열의 끝까지 잘라낸다.예를 들어, "unhappy".substring(2)은 "happy"를 반환한다. public String substring(int beginIndex, int endIndex) { int length = length(); checkBoundsBeginEnd(beginIndex, endIndex, length); if (beginIndex == 0 && endIndex == length) { retu.. [Java] BufferedReader Scanner보다는 BufferedReader가 빠르기 때문에 BufferedReader를 사용해서 입력을 받아보자. 간단하게 백준 문제 1000번의 풀이를 예제로 보자.import java.io.*;import java.util.*;class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nex.. [Java] enum 타입의 ==(동일성 비교) vs equals(동등성 비교) 1. 동일성(Identity) 비교 동일성 비교는 == 연산자를 사용하는 것으로, 두 객체가 같은 메모리 주소를 참조하는지를 확인한다.자바에서 하나의 enum 상수는 클래스 로드 시 한 번만 생성되고, 해당 상수는 JVM 내에서 단일 인스턴스를 보장한다. (싱글톤)따라서 동일한 enum 값끼리는 항상 == 비교를 통해 동일성을 확인할 수 있다.public class Example { public enum Day { MONDAY, TUESDAY, WEDNESDAY } public static void main(String[] args) { Day day1 = Day.MONDAY; Day day2 = Day.MONDAY; // 동일성 비교 .. 이전 1 다음