JavaRush /Java Blogu /Random-AZ /Kofe fasiləsi №156. Java-da Arrays.binarySearch() metodun...

Kofe fasiləsi №156. Java-da Arrays.binarySearch() metodundan necə istifadə etmək olar

Qrupda dərc edilmişdir
Mənbə: FreeCodeCamp Bu məqalə ilə siz Java-da Arrays.binarySearch() metodundan necə istifadə edəcəyinizi öyrənəcəksiniz. Kofe fasiləsi №156.  Java-da Arrays.binarySearch() metodundan necə istifadə etmək olar - 1

Java-da Arrays.binarySearch() nədir?

Arrays.binarySearch() metodu üçün rəsmi sənədlərdə deyilir:
  • Bu üsul ikili axtarış alqoritmindən istifadə edərək göstərilən bayt massivində göstərilən dəyər üçün axtarış aparır.
  • Zəng etməzdən əvvəl massiv çeşidlənməlidir ( sort(bayt[]) metodundan istifadə etməklə). Sıralanmasa, nəticələr müəyyən edilməyəcək.
  • Əgər massivdə müəyyən edilmiş dəyərə malik bir neçə element varsa, hansının tapılacağına zəmanət yoxdur.
Sadə dillə desək, Arrays.binarySearch() metodu çeşidlənmiş massivdə verilmiş elementi axtara və tapılsa onun indeksini qaytara bilər.
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);

	}
}
Arrays.binarySearch() metodu ilk arqument kimi axtarmaq istədiyiniz massivi, ikinci arqument kimi isə axtardığınız açarı götürür. Yuxarıdakı proqramın nəticəsi belə olacaq:
Verilmiş sait indeksdədir: 2
Unutmayın ki, metod elementin özünü deyil, tapılan elementin indeksini qaytarır. Beləliklə, indeksi bu nümunədə istifadə olunan kimi tam ədəd kimi saxlaya bilərsiniz. Varsayılan olaraq, metod axtarışın başlanğıc nöqtəsi kimi massivin birinci indeksindən və axtarışın bitmə nöqtəsi kimi massivin uzunluğundan istifadə edir. Bu halda, başlanğıc indeksi 0, bitmə indeksi isə 6-dır. Standart başlanğıc və bitmə indeksindən istifadə etmək əvəzinə, onları özünüz təyin edə bilərsiniz. Məsələn, indeks 2-dən indeks 4-ə qədər axtarış etmək istəyirsinizsə, bunu belə edə bilərsiniz:
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);

	}
}
Bu halda Arrays.binarySearch() metodu axtarış etmək istədiyiniz massivi birinci arqument, başlanğıc indeksini ikinci arqument, bitmə indeksini üçüncü, açarı isə dördüncü arqument kimi qəbul edir. Son indeksi massivin uzunluğunda saxladığınız müddətcə metod yaxşı işləməlidir. Ancaq onu keçsəniz, sıra istisnası xaricində Array indeksi əldə edəcəksiniz . Bu olduqca sadədir, elə deyilmi? Metod, əgər tapılsa, elementin indeksini qaytarır. Bəs verilən elementi tapmasa nə olar?

Arrays.binarySearch() verilmiş elementi tapmayanda nə baş verir?

Arrays.binarySearch() metodu üçün rəsmi sənədlərə bir daha nəzər salaq :
  • Metod müəyyən edilmiş diapazonda massivdə olarsa, axtarış nəticələrində açarın indeksini tapır; əks halda (-(daxma nöqtəsi) - 1) alırıq .
  • Daxiletmə nöqtəsi açarın massivə daxil ediləcəyi nöqtə kimi müəyyən edilir: diapazondakı birinci elementin indeksi açardan böyükdür və ya diapazondakı bütün elementlər diapazondan kiçikdirsə, toIndex (son indeks) müəyyən edilmiş açar.
  • Qeyd edək ki, açar tapıldıqda qaytarılan dəyər yalnız 0-dan böyük və ya ona bərabər olacaqdır.
Çox aydın deyil, elə deyilmi? Birinci sətirdə deyilir ki, metod serialda tapılarsa, axtarışdan açarın indeksini qaytaracaq. Əgər tapılmazsa, onda çıxış dəyərə bərabər olacaq (-(daxiletmə nöqtəsi) - 1) . Axtarış açarından asılı olaraq daxiletmə nöqtəsi müxtəlif mənalara malik ola bilər. Tutaq ki, bizdə massiv [5, 6, 7, 8, 9, 10] və 0 axtarış açarı var ki, bu da aydın şəkildə massivdə deyil. Bu halda axtarış açarı massivin bütün elementlərindən azdır. Lakin axtarış açarından böyük olan ilk element 5- dir . Beləliklə, bizim vəziyyətimizdə əlavə nöqtəsi olacaq:
(-(axtarış açarından böyük olan birinci elementin indeksi) - 1) = (0 - 1) = -1
Bunu belə bir kod parçasında həyata keçirə bilərsiniz:
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
	}
}
Yenidən fərz edək ki, bizdə massiv [5, 6, 7, 8, 9, 10] və 12 axtarış açarı var ki, bu da aydın şəkildə massivdə deyil. Bu halda axtarış açarı massivin bütün elementlərindən böyükdür. Burada daxiletmə nöqtəsi belə olacaq:
(-(sonluq indeksi (-(6) - 1) = (-6 - 1) = -7
Unutmayın ki, əgər siz son indeksi əl ilə təyin etməsəniz, metod son indeks kimi massivin uzunluğundan istifadə edir, bu halda 6- dır . Bunu belə bir kod parçasında həyata keçirə bilərsiniz:
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
	}
}
Bununla belə, başlanğıc və son indeksləri əl ilə təyin etsəniz, nəticələr dəyişəcək:
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

	}
}
Dəyərləri özünüz hesablamağa çalışın. Siz həmçinin Arrays.binarySearch() metodunu bu kimi simvollarla istifadə edə bilərsiniz :
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));

	}
}
Göstərilən axtarış açarı tapılmadıqda eyni prinsiplər tətbiq olunur. Lakin massivdəki simvol ilə verilmiş axtarış açarı arasında müqayisə aparılarkən müvafiq simvolun ASCII kodu istifadə olunacaq. Yəni A (65) a (97) -dən kiçik olacaq . Proqramınızın çıxışını çarpaz yoxlayarkən bunu nəzərə alın.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION