JavaRush /Java Blog /Random-TL /Coffee break #156. Paano gamitin ang Arrays.binarySearch(...

Coffee break #156. Paano gamitin ang Arrays.binarySearch() na pamamaraan sa Java

Nai-publish sa grupo
Pinagmulan: FreeCodeCamp Gamit ang artikulong ito, matututunan mo kung paano gamitin ang paraan ng Arrays.binarySearch() sa Java. Coffee break #156.  Paano gamitin ang paraan ng Arrays.binarySearch() sa Java - 1

Ano ang Arrays.binarySearch() sa Java?

Ang opisyal na dokumentasyon para sa paraan ng Arrays.binarySearch() ay nagsasaad ng:
  • Hinahanap ng paraang ito ang tinukoy na byte array para sa tinukoy na halaga gamit ang isang binary search algorithm.
  • Ang array ay dapat pagbukud-bukurin (gamit ang sort(byte[]) method ) bago gawin ang tawag. Kung hindi ito inayos, hindi matutukoy ang mga resulta.
  • Kung ang array ay naglalaman ng maraming elemento na may tinukoy na halaga, walang garantiya kung alin ang makikita.
Sa simpleng mga termino, ang Arrays.binarySearch() na paraan ay maaaring maghanap ng isang partikular na elemento sa isang pinagsunod-sunod na array at ibalik ang index nito kung natagpuan.
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);

	}
}
Kinukuha ng Arrays.binarySearch() na paraan ang array na gusto mong hanapin bilang unang argumento at ang key na hinahanap mo bilang pangalawang argumento. Ang output ng programa sa itaas ay:
Ang ibinigay na patinig ay nasa index: 2
Tandaan na ibinabalik ng pamamaraan ang index ng elementong natagpuan, hindi ang elemento mismo. Sa ganitong paraan maaari mong iimbak ang index bilang isang integer tulad ng ginamit sa halimbawang ito. Bilang default, ginagamit ng pamamaraan ang unang index ng array bilang panimulang punto ng paghahanap at ang haba ng array bilang pangwakas na punto ng paghahanap. Sa kasong ito, ang panimulang index ay 0 at ang pangwakas na index ay 6. Sa halip na gamitin ang default na panimulang index at pagtatapos, maaari mong tukuyin ang mga ito sa iyong sarili. Halimbawa, kung gusto mong maghanap mula sa index 2 hanggang index 4, magagawa mo ito tulad nito:
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);

	}
}
Sa kasong ito, kinukuha ng Arrays.binarySearch() na paraan ang array na gusto mong hanapin bilang unang argument, ang panimulang index bilang pangalawang argumento, ang pangwakas na index bilang pangatlo, at ang susi bilang ikaapat. Hangga't pinapanatili mo ang pangwakas na index sa loob ng haba ng array, dapat gumana nang maayos ang pamamaraan. Ngunit kung lalampas ka dito, makakakuha ka ng Array index na wala sa saklaw na exception . Ito ay medyo simple, tama? Ibinabalik ng pamamaraan ang index ng elemento kung ito ay natagpuan. Ngunit ano ang mangyayari kung hindi nito mahanap ang ibinigay na elemento?

Ano ang mangyayari kapag ang Arrays.binarySearch() ay hindi nakahanap ng isang partikular na elemento?

Tingnan natin muli ang opisyal na dokumentasyon para sa paraan ng Arrays.binarySearch() :
  • Hinahanap ng pamamaraan ang index ng isang susi sa mga resulta ng paghahanap kung ito ay nakapaloob sa array sa loob ng tinukoy na hanay; kung hindi, makakakuha tayo ng (-(insertion point) - 1) .
  • Ang insertion point ay tinukoy bilang ang punto kung saan ang isang susi ay ipapasok sa array: ang index ng unang elemento sa hanay ay mas malaki kaysa sa susi, o saIndex (end index) kung ang lahat ng mga elemento sa hanay ay mas mababa kaysa sa tinukoy na susi.
  • Tandaan na ang return value ay magiging mas malaki lamang sa o katumbas ng 0 kapag natagpuan ang key.
Hindi masyadong malinaw, tama? Ang unang linya ay nagsasaad na ang pamamaraan ay ibabalik ang index ng susi mula sa paghahanap kung ito ay matatagpuan sa array. Kung hindi ito natagpuan, ang output ay magiging katumbas ng halaga (-(insertion point) - 1) . Depende sa key sa paghahanap, maaaring magkaroon ng iba't ibang kahulugan ang insertion point . Sabihin nating mayroon tayong array [5, 6, 7, 8, 9, 10] at isang search key na 0 , na malinaw na wala sa array. Sa kasong ito, mas mababa ang search key kaysa sa lahat ng elemento ng array. Ngunit ang unang elemento na mas malaki kaysa sa search key ay 5 . Kaya, sa aming kaso ang insertion point ay:
(-(ang index ng unang elemento na mas malaki kaysa sa search key) - 1) = (0 - 1) = -1
Maaari mong ipatupad ito sa isang code snippet tulad nito:
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
	}
}
Ipagpalagay nating muli na mayroon tayong array [5, 6, 7, 8, 9, 10] at isang search key na 12 , na malinaw na wala sa array. Sa kasong ito, mas malaki ang search key kaysa sa lahat ng elemento ng array. Dito ang insertion point ay magiging ganito:
(-(ang pangwakas na index (-(6) - 1) = (-6 - 1) = -7
Tandaan na kung hindi mo manu-manong tinukoy ang index ng pagtatapos, ginagamit ng pamamaraan ang haba ng array bilang index ng pagtatapos, na sa kasong ito ay 6 . Maaari mong ipatupad ito sa isang code snippet tulad nito:
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
	}
}
Gayunpaman, magbabago ang mga resulta kung manu-mano mong tutukuyin ang mga index ng simula at pagtatapos:
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

	}
}
Subukang kalkulahin ang mga halaga sa iyong sarili. Maaari mo ring gamitin ang paraan ng Arrays.binarySearch() na may mga simbolo tulad nito:
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));

	}
}
Nalalapat ang parehong mga prinsipyo kung hindi matagpuan ang tinukoy na key sa paghahanap. Ngunit kapag naghahambing sa pagitan ng isang character sa array at isang ibinigay na search key, ang ASCII code ng kaukulang character ay gagamitin. Ibig sabihin, ang A (65) ay magiging mas mababa sa isang (97) . Isaalang-alang ito kapag sinusuri ang output ng iyong programa.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION