어제 오늘 내일

[Java 기초] Arrays.binarySearch()로 배열 검색하기 본문

IT/Java

[Java 기초] Arrays.binarySearch()로 배열 검색하기

hi.anna 2025. 8. 29. 00:54

배열에서 특정 값을 찾을 때 보통은 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()를 사용하되, 정렬을 꼭 먼저 해주자!

 

 

반응형
Comments