JavaRush /Blog Java /Random-MS /Coffee break #156. Cara menggunakan kaedah Arrays.binaryS...

Coffee break #156. Cara menggunakan kaedah Arrays.binarySearch() dalam Java

Diterbitkan dalam kumpulan
Sumber: FreeCodeCamp Dengan artikel ini, anda akan belajar cara menggunakan kaedah Arrays.binarySearch() dalam Java. Coffee break #156.  Cara menggunakan kaedah Arrays.binarySearch() dalam Java - 1

Apakah Arrays.binarySearch() dalam Java?

Dokumentasi rasmi untuk kaedah Arrays.binarySearch() menyatakan:
  • Kaedah ini mencari tatasusunan bait yang ditentukan untuk nilai yang ditentukan menggunakan algoritma carian binari.
  • Tatasusunan mesti diisih (menggunakan kaedah sort(bait[]) ) sebelum panggilan dibuat. Jika ia tidak disusun, keputusan tidak akan ditentukan.
  • Jika tatasusunan mengandungi berbilang elemen dengan nilai yang ditentukan, tiada jaminan yang mana satu akan ditemui.
Secara ringkas, kaedah Arrays.binarySearch() boleh mencari elemen tertentu dalam tatasusunan yang diisih dan mengembalikan indeksnya jika ditemui.
import java.util.Arrays;

public class Main {

	public static void main(String[] args) {
		char vowels[] = {'a', 'e', 'i', 'o', 'u'};

		char key = 'i';

		int foundItemIndex = Arrays.binarySearch(vowels, key);

		System.out.println("The given vowel is at index: " + foundItemIndex);

	}
}
Kaedah Arrays.binarySearch() mengambil tatasusunan yang anda mahu cari sebagai hujah pertama dan kunci yang anda cari sebagai hujah kedua. Output program di atas ialah:
Vokal yang diberikan adalah pada indeks: 2
Ingat bahawa kaedah itu mengembalikan indeks elemen yang ditemui, bukan elemen itu sendiri. Dengan cara ini anda boleh menyimpan indeks sebagai integer seperti yang digunakan dalam contoh ini. Secara lalai, kaedah menggunakan indeks pertama tatasusunan sebagai titik permulaan carian dan panjang tatasusunan sebagai titik akhir carian. Dalam kes ini, indeks permulaan ialah 0 dan indeks penamat ialah 6. Daripada menggunakan indeks permulaan dan penamat lalai, anda boleh menentukannya sendiri. Sebagai contoh, jika anda ingin mencari dari indeks 2 hingga indeks 4, anda boleh melakukannya seperti ini:
import java.util.Arrays;

public class Main {

	public static void main(String[] args) {
		char vowels[] = {'a', 'e', 'i', 'o', 'u'};

		char key = 'i';
		int startIndex = 2;
		int endIndex = 4;

		int foundItemIndex = Arrays.binarySearch(vowels, startIndex, endIndex, key);

		System.out.println("The given vowel is at index: " + foundItemIndex);

	}
}
Dalam kes ini, kaedah Arrays.binarySearch() mengambil tatasusunan yang anda ingin cari sebagai argumen pertama, indeks permulaan sebagai argumen kedua, indeks penamat sebagai ketiga dan kunci sebagai keempat. Selagi anda mengekalkan indeks pengakhiran dalam panjang tatasusunan, kaedah itu harus berfungsi dengan baik. Tetapi jika anda melebihinya, anda akan mendapat indeks Array daripada pengecualian julat . Ia agak mudah, bukan? Kaedah mengembalikan indeks elemen jika ia dijumpai. Tetapi apa yang berlaku jika ia tidak menemui elemen yang diberikan?

Apakah yang berlaku apabila Arrays.binarySearch() tidak menjumpai elemen tertentu?

Mari kita lihat lagi dokumentasi rasmi untuk kaedah Arrays.binarySearch() :
  • Kaedah mencari indeks kunci dalam hasil carian jika ia terkandung dalam tatasusunan dalam julat yang ditentukan; jika tidak, kita dapat (-(titik sisipan) - 1) .
  • Titik sisipan ditakrifkan sebagai titik di mana kunci akan dimasukkan ke dalam tatasusunan: indeks elemen pertama dalam julat lebih besar daripada kunci, atau kepadaIndex (indeks akhir) jika semua elemen dalam julat kurang daripada kunci yang ditentukan.
  • Ambil perhatian bahawa nilai pulangan hanya akan lebih besar daripada atau sama dengan 0 apabila kunci ditemui.
Tidak begitu jelas, bukan? Baris pertama menyatakan bahawa kaedah akan mengembalikan indeks kunci daripada carian jika ia ditemui dalam tatasusunan. Jika ia tidak dijumpai, maka output akan sama dengan nilai (-(titik sisipan) - 1) . Bergantung pada kunci carian, titik sisipan boleh mempunyai makna yang berbeza. Katakan kita mempunyai tatasusunan [5, 6, 7, 8, 9, 10] dan kunci carian 0 , yang jelas tiada dalam tatasusunan. Dalam kes ini, kunci carian adalah kurang daripada semua elemen tatasusunan. Tetapi elemen pertama yang lebih besar daripada kunci carian ialah 5 . Oleh itu, dalam kes kami titik sisipan ialah:
(-(indeks elemen pertama lebih besar daripada kunci carian) - 1) = (0 - 1) = -1
Anda boleh melaksanakan ini dalam coretan kod seperti ini:
package arrays;

import java.util.Arrays;

public class Main {

	public static void main(String[] args) {
		int numbers[] = {5, 6, 7, 8, 9, 10};

		System.out.println(Arrays.binarySearch(numbers, 0)); // -1
	}
}
Mari kita anggap sekali lagi bahawa kita mempunyai tatasusunan [5, 6, 7, 8, 9, 10] dan kunci carian 12 , yang jelas tiada dalam tatasusunan. Dalam kes ini, kunci carian adalah lebih besar daripada semua elemen tatasusunan. Di sini titik sisipan akan menjadi seperti ini:
(-(indeks pengakhiran (-(6) - 1) = (-6 - 1) = -7
Ingat bahawa jika anda tidak menentukan indeks penamat secara manual, kaedah menggunakan panjang tatasusunan sebagai indeks penamat, yang dalam kes ini ialah 6 . Anda boleh melaksanakan ini dalam coretan kod seperti ini:
import java.util.Arrays;

public class Main {

	public static void main(String[] args) {
		int numbers[] = {5, 6, 7, 8, 9, 10};

		System.out.println(Arrays.binarySearch(numbers, 12)); // -7
	}
}
Walau bagaimanapun, keputusan akan berubah jika anda mentakrifkan indeks permulaan dan akhir secara manual:
import java.util.Arrays;

public class Main {

	public static void main(String[] args) {
		int numbers[] = {5, 6, 7, 8, 9, 10};

		int startIndex = 1;
		int endIndex = 3;

		System.out.println(Arrays.binarySearch(numbers, startIndex, endIndex, 5)); // -2
		System.out.println(Arrays.binarySearch(numbers, startIndex, endIndex, 10)); // -4

	}
}
Cuba hitung nilai sendiri. Anda juga boleh menggunakan kaedah Arrays.binarySearch() dengan simbol seperti ini:
import java.util.Arrays;

public class Main {

	public static void main(String[] args) {
		char vowels[] = {'a', 'e', 'i', 'o', 'u'};

		char key = 'i';
		int startIndex = 2;
		int endIndex = 4;

		System.out.println(Arrays.binarySearch(vowels, startIndex, endIndex, key));

	}
}
Prinsip yang sama digunakan jika kunci carian yang ditentukan tidak ditemui. Tetapi apabila membandingkan antara aksara dalam tatasusunan dan kunci carian yang diberikan, kod ASCII aksara yang sepadan akan digunakan. Iaitu, A (65) akan kurang daripada (97) . Ambil kira perkara ini apabila menyemak silang output program anda.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION