0Pricing
Java Academy · 강의

Arrays.binarySearch

정렬된 배열을 검색합니다

Arrays.binarySearch은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

정렬된 배열 검색하기

Arrays.binarySearch는 정렬된 배열에서 O(log n) 시간에 요소를 찾습니다. 검색 범위를 반복해서 절반으로 줄이므로 모든 요소를 훑는 것보다 훨씬 빠릅니다.

정렬되어 있어야 한다는 전제 조건

배열은 오름차순으로 미리 정렬되어 있어야 합니다. 그렇지 않으면 결과가 정의되지 않습니다. 확실하지 않다면 항상 먼저 Arrays.sort를 사용하십시오.

기본 검색

값을 찾으면 binarySearch는 해당 인덱스를 반환합니다.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] nums = {2, 4, 6, 8, 10};
        int index = Arrays.binarySearch(nums, 8);
        System.out.println("Found at index " + index);
    }
}

값이 없을 때

값이 없으면 반환 값은 음수이며, -(insertionPoint) - 1과 같습니다. 삽입 위치는 배열의 정렬 상태를 유지하면서 해당 값을 넣을 위치입니다.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] nums = {2, 4, 6, 8, 10};
        int result = Arrays.binarySearch(nums, 5);
        System.out.println("Raw result: " + result);
    }
}

삽입 위치 복구하기

음수 결과를 삽입 인덱스로 바꾸려면 -(result) - 1을 계산하십시오. 그러면 누락된 값을 어디에 삽입해야 하는지 알 수 있습니다.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] nums = {2, 4, 6, 8, 10};
        int result = Arrays.binarySearch(nums, 5);
        if (result < 0) {
            int insertionPoint = -(result) - 1;
            System.out.println("Would insert at index " + insertionPoint);
        }
    }
}

객체 배열 검색하기

binarySearch는 자연 순서를 사용하여 객체 배열에서도 작동합니다. 배열은 검색에서 비교하는 방식과 동일한 방식으로 정렬되어 있어야 합니다.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[] names = {"Alice", "Bob", "Charlie", "Dave"};
        int index = Arrays.binarySearch(names, "Charlie");
        System.out.println("Charlie at index " + index);
    }
}

비교자로 검색하기

배열을 사용자 지정 Comparator로 정렬했다면 binarySearch에도 같은 Comparator를 전달해야 합니다. 그렇지 않으면 결과에 의미가 없습니다.

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        String[] names = {"Dave", "Charlie", "Bob", "Alice"};
        Comparator<String> desc = Comparator.reverseOrder();
        Arrays.sort(names, desc);
        int index = Arrays.binarySearch(names, "Charlie", desc);
        System.out.println("Index: " + index);
    }
}

범위 검색하기

binarySearch(array, fromIndex, toIndex, key)를 사용하면 배열의 일부로 검색을 제한할 수 있습니다. 범위의 경계는 sort와 동일한 포함-제외 규칙을 따릅니다.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] nums = {2, 4, 6, 8, 10, 12};
        int index = Arrays.binarySearch(nums, 1, 5, 8);
        System.out.println("Index: " + index);
    }
}

중복 값의 결과는 지정되지 않음

배열에 중복 값이 있으면 일치하는 인덱스 중 어느 것이 반환될지 보장되지 않습니다. 이진 검색은 고유한 키가 있는 배열에 사용하는 것이 가장 좋습니다.

그냥 반복하면 안 될까요?

선형 검색은 O(n)이고 정렬되지 않은 데이터에서도 작동합니다. 이진 검색은 O(log n)이지만 정렬된 데이터가 필요합니다. 큰 데이터 모음에서 반복적으로 검색한다면 한 번 정렬한 뒤 여러 번 이진 검색하는 방식이 크게 효율적입니다.

종합하기

정렬한 다음 검색하고, 결과를 안전하게 해석하십시오.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] ids = {40, 10, 30, 20};
        Arrays.sort(ids);
        int r = Arrays.binarySearch(ids, 30);
        if (r >= 0) {
            System.out.println("Found 30 at index " + r);
        } else {
            System.out.println("Not found; insert at " + (-(r) - 1));
        }
    }
}

빠른 확인

binarySearch에 대한 이해도를 확인해 보십시오.

복습

Arrays.binarySearch를 사용한 빠른 검색을 배웠습니다.

  • 배열을 먼저 정렬해야 합니다.
  • 음수가 아닌 결과는 찾은 인덱스입니다.
  • 음수 결과에는 -(result) - 1 형태로 삽입 위치가 인코딩되어 있습니다.
  • 정렬과 검색에 같은 Comparator를 사용하십시오.

자주 묻는 질문

“Arrays.binarySearch” 강의는 무료인가요?

네 — “Arrays.binarySearch” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Arrays.binarySearch”에서 뭘 배우나요?

정렬된 배열을 검색합니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Arrays.binarySearch” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Arrays.sort와 정렬
  2. Arrays.binarySearch
  3. Arrays.fill과 copyOf
  4. Arrays.equals와 toString
← Java Academy(으)로 돌아가기