JavaRush /Java Blog /Random-ID /Rehat kopi #156. Cara menggunakan metode Arrays.binarySea...

Rehat kopi #156. Cara menggunakan metode Arrays.binarySearch() di Java

Dipublikasikan di grup Random-ID
Sumber: FreeCodeCamp Dengan artikel ini, Anda akan mempelajari cara menggunakan metode Arrays.binarySearch() di Java. Rehat kopi #156.  Cara menggunakan metode Arrays.binarySearch() di Java - 1

Apa itu Arrays.binarySearch() di Java?

Dokumentasi resmi untuk metode Arrays.binarySearch() menyatakan:
  • Metode ini mencari array byte tertentu untuk nilai tertentu menggunakan algoritma pencarian biner.
  • Array harus diurutkan (menggunakan metode sort(byte[]) ) sebelum panggilan dilakukan. Jika tidak diurutkan maka hasilnya tidak akan ditentukan.
  • Jika array berisi beberapa elemen dengan nilai yang ditentukan, tidak ada jaminan elemen mana yang akan ditemukan.
Secara sederhana, metode Arrays.binarySearch() dapat mencari elemen tertentu dalam array yang diurutkan dan mengembalikan indeksnya jika ditemukan.
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);

	}
}
Metode Arrays.binarySearch() mengambil array yang ingin Anda cari sebagai argumen pertama dan kunci yang Anda cari sebagai argumen kedua. Output dari program di atas adalah:
Vokal yang diberikan ada pada indeks: 2
Ingatlah bahwa metode ini mengembalikan indeks elemen yang ditemukan, bukan elemen itu sendiri. Dengan cara ini Anda dapat menyimpan indeks sebagai bilangan bulat seperti yang digunakan dalam contoh ini. Secara default, metode ini menggunakan indeks pertama array sebagai titik awal pencarian dan panjang array sebagai titik akhir pencarian. Dalam hal ini, indeks awal adalah 0 dan indeks akhir adalah 6. Daripada menggunakan indeks awal dan akhir default, Anda dapat menentukannya sendiri. Misalnya, jika Anda ingin mencari dari indeks 2 hingga indeks 4, Anda dapat 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 hal ini, metode Arrays.binarySearch() mengambil array yang ingin Anda cari sebagai argumen pertama, indeks awal sebagai argumen kedua, indeks akhir sebagai argumen ketiga, dan kunci sebagai argumen keempat. Selama Anda menjaga indeks akhir dalam panjang array, metode ini akan berfungsi dengan baik. Tetapi jika Anda melebihinya, Anda akan mendapatkan indeks Array di luar jangkauan pengecualian . Ini cukup sederhana, bukan? Metode ini mengembalikan indeks elemen jika ditemukan. Namun apa yang terjadi jika elemen yang diberikan tidak ditemukan?

Apa yang terjadi jika Arrays.binarySearch() tidak menemukan elemen tertentu?

Mari kita lihat lagi dokumentasi resmi untuk metode Arrays.binarySearch() :
  • Metode ini menemukan indeks kunci dalam hasil pencarian jika kunci tersebut terdapat dalam array dalam rentang yang ditentukan; jika tidak, kita mendapatkan (-(titik penyisipan) - 1) .
  • Titik penyisipan didefinisikan sebagai titik di mana kunci akan dimasukkan ke dalam array: indeks elemen pertama dalam rentang lebih besar dari kunci, atau toIndex (indeks akhir) jika semua elemen dalam rentang lebih kecil dari kunci yang ditentukan.
  • Perhatikan bahwa nilai yang dikembalikan hanya akan lebih besar atau sama dengan 0 ketika kunci ditemukan.
Tidak terlalu jelas, bukan? Baris pertama menyatakan bahwa metode akan mengembalikan indeks kunci dari pencarian jika ditemukan dalam array. Jika tidak ditemukan, maka outputnya akan sama dengan nilai (-(insertion point) - 1) . Tergantung pada kunci pencarian, titik penyisipan dapat memiliki arti berbeda. Katakanlah kita memiliki array [5, 6, 7, 8, 9, 10] dan kunci pencarian 0 , yang jelas-jelas tidak ada dalam array. Dalam hal ini, kunci pencarian kurang dari semua elemen array. Namun elemen pertama yang lebih besar dari kunci pencarian adalah 5 . Jadi, dalam kasus kita, titik penyisipannya adalah:
(-(indeks elemen pertama lebih besar dari kunci pencarian) - 1) = (0 - 1) = -1
Anda dapat menerapkannya dalam cuplikan kode 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 asumsikan lagi bahwa kita memiliki array [5, 6, 7, 8, 9, 10] dan kunci pencarian 12 , yang jelas-jelas tidak ada dalam array. Dalam hal ini, kunci pencarian lebih besar dari semua elemen array. Di sini titik penyisipannya akan seperti ini:
(-(indeks akhir (-(6) - 1) = (-6 - 1) = -7
Ingatlah bahwa jika Anda tidak menentukan indeks akhir secara manual, metode ini akan menggunakan panjang array sebagai indeks akhir, yang dalam hal ini adalah 6 . Anda dapat menerapkannya dalam cuplikan kode 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
	}
}
Namun, hasilnya akan berubah jika Anda menentukan indeks awal 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

	}
}
Coba hitung sendiri nilainya. Anda juga dapat menggunakan metode 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 berlaku jika kunci pencarian yang ditentukan tidak ditemukan. Namun ketika membandingkan antara karakter dalam array dan kunci pencarian tertentu, kode ASCII dari karakter terkait akan digunakan. Artinya, A (65) akan lebih kecil dari a (97) . Pertimbangkan hal ini saat memeriksa ulang keluaran program Anda.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION