Arrays.binarySearch
Cari dalam array terurut
Arrays.binarySearch adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Mencari dalam Larik Terurut
Arrays.binarySearch menemukan elemen dalam larik yang sudah terurut dalam waktu O(log n). Metode ini berulang kali membagi dua rentang pencarian, sehingga jauh lebih cepat daripada memeriksa setiap elemen.
Prasyarat Larik Terurut
Larik tersebut harus sudah diurutkan secara menaik. Jika tidak, hasilnya tidak terdefinisi. Selalu gunakan Arrays.sort terlebih dahulu jika Anda tidak yakin.
Pencarian Dasar
Jika nilai ditemukan, binarySearch mengembalikan indeksnya.
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);
}
}Saat Nilai Tidak Ditemukan
Jika nilai tidak ada, nilai kembalian bersifat negatif: nilainya sama dengan -(insertionPoint) - 1. Titik penyisipan adalah posisi tempat nilai tersebut seharusnya diletakkan agar larik tetap terurut.
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);
}
}Mendapatkan Kembali Titik Penyisipan
Untuk mengubah hasil negatif menjadi indeks penyisipan, hitung -(result) - 1. Hasilnya menunjukkan tempat untuk menyisipkan nilai yang hilang.
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);
}
}
}Mencari dalam Larik Objek
binarySearch juga berfungsi pada larik objek menggunakan urutan alami. Larik tersebut harus diurutkan dengan cara yang sama seperti cara pencarian membandingkan elemen.
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);
}
}Mencari dengan Comparator
Jika larik diurutkan dengan Comparator khusus, Anda harus memberikan Comparator yang sama kepada binarySearch; jika tidak, hasilnya tidak bermakna.
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);
}
}Mencari dalam Rentang
Anda dapat membatasi pencarian pada sebagian larik dengan binarySearch(array, fromIndex, toIndex, key). Batas rentangnya mengikuti aturan mencakup-tidak-mencakup yang sama seperti pengurutan.
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);
}
}Duplikat Tidak Ditentukan
Jika larik berisi nilai duplikat, tidak ada jaminan indeks mana dari nilai yang cocok akan dikembalikan. Pencarian biner paling baik digunakan pada larik dengan kunci unik.
Mengapa Tidak Cukup Menggunakan Perulangan?
Pemindaian linear membutuhkan O(n) dan dapat digunakan pada data yang belum terurut. Pencarian biner membutuhkan O(log n), tetapi memerlukan data yang sudah terurut. Untuk pencarian berulang pada kumpulan data besar, mengurutkan sekali lalu melakukan pencarian biner berkali-kali memberikan keuntungan besar.
Menggabungkan Semuanya
Urutkan, lalu cari, dan tafsirkan hasilnya dengan aman.
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));
}
}
}Uji Cepat
Uji pemahaman Anda tentang binarySearch.
Rangkuman
Anda telah mempelajari pencarian cepat dengan Arrays.binarySearch.
- Larik harus diurutkan terlebih dahulu.
- Hasil yang tidak negatif adalah indeks elemen yang ditemukan.
- Hasil negatif menyimpan titik penyisipan sebagai
-(result) - 1. - Gunakan Comparator yang sama untuk pengurutan dan pencarian.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Arrays.binarySearch” gratis?
Ya — teks lengkap “Arrays.binarySearch” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Arrays.binarySearch”?
Cari dalam array terurut Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Arrays.binarySearch” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Arrays.sort dan Pengurutan
- Arrays.binarySearch
- Arrays.fill dan copyOf
- Arrays.equals dan toString