반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 문자열
- html
- 자바스크립트
- 인텔리제이
- string
- windows
- Button
- javascript
- Visual Studio Code
- date
- Eclipse
- 정규식
- ArrayList
- js
- vscode
- 자바
- Array
- table
- CSS
- list
- 이탈리아
- Java
- IntelliJ
- Maven
- input
- 테이블
- CMD
- 배열
- 이클립스
- json
Archives
- Today
- Total
어제 오늘 내일
[Java 기초] Arrays.binarySearch()로 배열 검색하기 본문
배열에서 특정 값을 찾을 때 보통은 for
문을 돌려 하나씩 비교합니다. 하지만 배열이 커질수록 성능이 떨어지죠.
이럴 때 이진 탐색 알고리즘을 활용하는 Arrays.binarySearch()
메서드를 쓰면 훨씬 빠르게 값을 찾을 수 있습니다.
1. Arrays.binarySearch()란?
- 배열에서 특정 값의 인덱스를 반환합니다.
- 내부적으로 이진 탐색(Binary Search) 알고리즘을 사용합니다.
- 전제 조건: 배열이 오름차순 정렬되어 있어야 합니다.
👉 메서드 시그니처:
public static int binarySearch(int[] a, int key)
a
: 검색할 배열key
: 찾고자 하는 값
2. 기본 사용 예제
import java.util.Arrays;
public class BinarySearchExample1 {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
int index = Arrays.binarySearch(numbers, 30);
System.out.println("찾은 인덱스: " + index);
}
}
실행 결과
찾은 인덱스: 2
👉 30
은 배열에서 인덱스 2
에 위치합니다.
3. 값이 없을 때의 결과
찾는 값이 없으면 음수 값을 반환합니다.
import java.util.Arrays;
public class BinarySearchExample2 {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
int index = Arrays.binarySearch(numbers, 25);
System.out.println("결과: " + index);
}
}
실행 결과
결과: -3
👉 결과가 -3
인 이유:
- 음수는 "찾는 값이 없음"을 의미합니다.
-insertionPoint - 1
형태로 반환되는데, 여기서 삽입될 위치가2
이므로 결과는-3
입니다.
4. 정렬되지 않은 배열의 경우
binarySearch()
는 반드시 정렬된 배열에서만 올바르게 동작합니다.
import java.util.Arrays;
public class BinarySearchExample3 {
public static void main(String[] args) {
int[] numbers = {50, 10, 40, 20, 30};
int index = Arrays.binarySearch(numbers, 20);
System.out.println("결과: " + index);
}
}
실행 결과 (예상 불가, 잘못된 값)
결과: -5
👉 반드시 Arrays.sort()
로 정렬한 후에 binarySearch()
를 사용해야 합니다.
5. 문자열 배열 예제
문자열 배열에서도 사용할 수 있습니다.
import java.util.Arrays;
public class BinarySearchExample4 {
public static void main(String[] args) {
String[] fruits = {"Apple", "Banana", "Cherry", "Date"};
Arrays.sort(fruits); // 반드시 정렬 필요
int index = Arrays.binarySearch(fruits, "Cherry");
System.out.println("찾은 인덱스: " + index);
}
}
실행 결과
찾은 인덱스: 2
6. Comparator와 함께 사용하기
대소문자 구분 없이 검색하고 싶다면 Comparator
를 함께 사용할 수 있습니다.
import java.util.Arrays;
import java.util.Comparator;
public class BinarySearchExample5 {
public static void main(String[] args) {
String[] fruits = {"apple", "Banana", "cherry", "Date"};
Arrays.sort(fruits, String.CASE_INSENSITIVE_ORDER);
int index = Arrays.binarySearch(fruits, "CHERRY", String.CASE_INSENSITIVE_ORDER);
System.out.println("찾은 인덱스: " + index);
}
}
실행 결과
찾은 인덱스: 2
7. 정리
binarySearch()
는 이진 탐색을 활용한 빠른 검색 메서드- 배열은 반드시 정렬되어 있어야 함
- 찾는 값이 없으면 음수(-insertionPoint - 1) 반환
- 문자열 배열이나 사용자 정의 정렬에도 활용 가능
👉 배열에서 특정 값을 빠르게 찾고 싶다면 Arrays.binarySearch()
를 사용하되, 정렬을 꼭 먼저 해주자!
반응형
'IT > Java' 카테고리의 다른 글
[Java 기초] Arrays.asList()로 배열을 리스트로 바꾸기 (0) | 2025.08.30 |
---|---|
[Java 기초] Arrays.setAll()로 배열 값 채우기 (0) | 2025.08.29 |
[Java 기초] Arrays.copyOfRange()로 배열 구간 복사하기 (1) | 2025.08.28 |
[Java 기초] Arrays.equals()로 배열 비교하기 (1) | 2025.08.28 |
[Java 기초] Arrays.copyOf()로 배열 복사하기 (0) | 2025.08.27 |
Comments