Arrays.binarySearch
Cari tatasusunan yang telah diisih
Arrays.binarySearch ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Mencari Tatasusunan yang Telah Diisih
Arrays.binarySearch mencari elemen dalam tatasusunan yang telah diisih dalam masa O(log n). Kaedah ini berulang kali membahagi dua julat carian, yang jauh lebih pantas daripada mengimbas setiap elemen.
Prasyarat Susunan Terisih
Tatasusunan itu mesti sudah diisih mengikut tertib menaik. Jika tidak, hasilnya tidak ditentukan. Sentiasa gunakan Arrays.sort terlebih dahulu jika anda tidak pasti.
Carian Asas
Apabila nilai ditemui, 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);
}
}Apabila Nilai Tiada
Jika nilai itu tidak wujud, nilai yang dikembalikan adalah negatif: nilainya sama dengan -(insertionPoint) - 1. Titik sisipan ialah tempat nilai itu akan diletakkan supaya tatasusunan kekal terisih.
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 Semula Titik Sisipan
Untuk menukar hasil negatif kepada indeks sisipan, kira -(result) - 1. Ini memberitahu anda tempat untuk menyisipkan nilai yang tiada.
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 Tatasusunan Objek
binarySearch juga berfungsi pada tatasusunan objek menggunakan susunan semula jadi. Tatasusunan itu mesti diisih dengan cara yang sama seperti perbandingan carian.
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 tatasusunan diisih dengan Comparator tersuai, anda mesti menghantar 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 Julat
Anda boleh mengehadkan carian kepada sebahagian daripada tatasusunan dengan binarySearch(array, fromIndex, toIndex, key). Sempadan julat mengikut peraturan merangkumi-tidak-merangkumi yang sama seperti 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);
}
}Pendua Tidak Ditentukan
Jika tatasusunan mengandungi nilai pendua, tiada jaminan indeks sepadan yang mana akan dikembalikan. Carian binari paling sesuai digunakan pada tatasusunan dengan kunci unik.
Mengapa Tidak Menggunakan Gelung Sahaja?
Imbasan linear ialah O(n) dan berfungsi pada data yang belum diisih. Carian binari ialah O(log n), tetapi memerlukan data yang telah diisih. Untuk carian berulang pada set data besar, mengisih sekali kemudian melakukan carian binari berkali-kali memberikan kelebihan yang besar.
Menggabungkan Semuanya
Isih, kemudian cari, dan tafsirkan hasilnya dengan selamat.
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));
}
}
}Semakan Pantas
Uji pemahaman anda tentang binarySearch.
Imbas Kembali
Anda telah mempelajari carian pantas dengan Arrays.binarySearch.
- Tatasusunan mesti diisih terlebih dahulu.
- Hasil tidak negatif ialah indeks yang ditemui.
- Hasil negatif mengekodkan titik sisipan sebagai
-(result) - 1. - Gunakan Comparator yang sama untuk pengisihan dan carian.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Arrays.binarySearch” percuma?
Ya — teks penuh “Arrays.binarySearch” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Arrays.binarySearch”?
Cari tatasusunan yang telah diisih Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Arrays.binarySearch” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Arrays.sort dan pengisihan
- Arrays.binarySearch
- Arrays.fill dan copyOf
- Arrays.equals dan toString