JavaRush /Java блогы /Random-KK /Кофе-брейк №156. Java тілінде Arrays.binarySearch() әдісі...

Кофе-брейк №156. Java тілінде Arrays.binarySearch() әдісін қалай қолдануға болады

Топта жарияланған
Дереккөз: FreeCodeCamp Осы мақала арқылы сіз Java тілінде Arrays.binarySearch() әдісін пайдалануды үйренесіз. Кофе-брейк №156.  Java тілінде Arrays.binarySearch() әдісін пайдалану жолы - 1

Java тіліндегі Arrays.binarySearch() дегеніміз не?

Arrays.binarySearch() әдісіне арналған ресми құжаттамада былай делінген:
  • Бұл әдіс екілік іздеу алгоритмі арқылы көрсетілген мән үшін көрсетілген byte массивін іздейді.
  • Қоңырау шалу алдында массив сұрыпталуы керек ( sort(byte[]) әдісі арқылы). Егер ол сұрыпталмаса, нәтижелер анықталмайды.
  • Егер массивте көрсетілген мәні бар бірнеше элементтер болса, олардың қайсысы табылатынына кепілдік жоқ.
Қарапайым тілмен айтқанда, Arrays.binarySearch() әдісі сұрыпталған массивте берілген элементті іздей алады және табылған жағдайда оның индексін қайтарады.
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() әдісі бірінші аргумент ретінде ізделетін массивді және екінші аргумент ретінде сіз іздеп жатқан кілтті қабылдайды. Жоғарыда көрсетілген бағдарламаның нәтижесі:
Берілген дауысты дыбыс индексте: 2
Әдіс элементтің өзін емес, табылған элементтің индексін қайтаратынын есте сақтаңыз. Осылайша индексті осы мысалда қолданылғандай бүтін сан ретінде сақтауға болады. Әдепкі бойынша, әдіс іздеудің бастапқы нүктесі ретінде массивтің бірінші индексін және іздеудің аяқталу нүктесі ретінде массив ұзындығын пайдаланады. Бұл жағдайда бастапқы индекс 0 және аяқталу индексі 6. Әдепкі бастапқы және аяқталу индексін пайдаланудың орнына оларды өзіңіз анықтай аласыз. Мысалы, индекс 2-ден 4-ке дейін іздеу керек болса, мұны келесідей орындауға болады:
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);

	}
}
Бұл жағдайда Arrays.binarySearch() әдісі бірінші аргумент ретінде іздеу керек массивді, екінші аргумент ретінде бастапқы индексті, үшінші ретінде аяқталу индексін және төртінші ретінде кілтті алады. Аяқтау индексін массив ұзындығы ішінде сақтаған кезде, әдіс жақсы жұмыс істеуі керек. Бірақ егер сіз одан асып кетсеңіз, ауқымнан тыс ерекше жағдайдағы массив индексін аласыз . Бұл өте қарапайым, солай ма? Егер ол табылса, әдіс элементтің индексін қайтарады. Бірақ ол берілген элементті таппаса не болады?

Arrays.binarySearch() берілген элементті таппағанда не болады?

Arrays.binarySearch() әдісі үшін ресми құжаттаманы тағы бір рет қарастырайық :
  • Әдіс кілттің индексін іздеу нәтижелерінен табады, егер ол көрсетілген ауқымдағы массивте болса; әйтпесе (-(кірістіру нүктесі) - 1) аламыз .
  • Кірістіру нүктесі алапқа кілт кірістірілетін нүкте ретінде анықталады: ауқымдағы бірінші элементтің индексі кілттен үлкен немесе ауқымдағы барлық элементтер мәннен аз болса, toIndex (соңғы индекс) көрсетілген кілт.
  • Кілт табылған кезде қайтару мәні тек 0-ден үлкен немесе оған тең болатынын ескеріңіз.
Өте анық емес, солай ма? Бірінші жол, егер ол массивте табылса, әдіс іздеуден кілттің индексін қайтаратынын айтады. Егер ол табылмаса, онда шығыс (-(кірістіру нүктесі) - 1) мәніне тең болады . Іздеу кілтіне байланысты кірістіру нүктесі әртүрлі мағынаға ие болуы мүмкін. Бізде [5, 6, 7, 8, 9, 10] массиві және 0 іздеу кілті бар делік , ол массивте анық емес. Бұл жағдайда іздеу кілті массивтің барлық элементтерінен аз болады. Бірақ іздеу кілтінен үлкен бірінші элемент - 5 . Осылайша, біздің жағдайда кірістіру нүктесі болады:
(-(іздеу кілтінен үлкенірек бірінші элементтің индексі) - 1) = (0 - 1) = -1
Сіз мұны келесідей code үзіндісінде жүзеге асыра аласыз:
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
	}
}
Бізде [5, 6, 7, 8, 9, 10] массиві және 12 іздеу кілті бар деп қайталап көрейік , ол массивте анық емес. Бұл жағдайда іздеу кілті массивтің барлық элементтерінен үлкенірек болады. Мұнда кірістіру нүктесі келесідей болады:
(-(соңғы индекс (-(6) - 1) = (-6 - 1) = -7)
Аяқтау индексін қолмен көрсетпесеңіз, әдіс аяқталу индексі ретінде массив ұзындығын пайдаланатынын есте сақтаңыз, бұл жағдайда ол 6 болады . Сіз мұны келесідей code үзіндісінде жүзеге асыра аласыз:
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
	}
}
Дегенмен, бастапқы және аяқталу индекстерін қолмен анықтасаңыз, нәтижелер өзгереді:
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

	}
}
Мәндерді өзіңіз есептеуге тырысыңыз. Сондай-ақ Arrays.binarySearch() әдісін келесі белгілермен пайдалануға болады :
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));

	}
}
Көрсетілген іздеу кілті табылмаса, дәл осындай принциптер қолданылады. Бірақ массивтегі таңба мен берілген іздеу кілтін салыстыру кезінде сәйкес таңбаның ASCII codeы пайдаланылады. Яғни, A (65) a (97) мәнінен кіші болады . Бағдарламаның шығуын салыстырып тексеру кезінде осыны ескеріңіз.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION