Arrays.binarySearch() metod söker den angivna arrayen av den givna datatypen efter det angivna värdet med hjälp av den binära sökalgoritmen. Arrayen måste sorteras efter Arrays.sort() metod innan du ringer detta samtal. Om det inte är sorterat är resultaten odefinierade. Om arrayen innehåller flera element med det angivna värdet finns det ingen garanti för vilken som kommer att hittas. Låt oss glida igenom illustrationen nedan enligt följande.
Illustration:
Searching for 35 in byteArr[] = {10,20,15,22,35} will give result as 4 as it is the index of 35 Searching for g in charArr[] = {'g','p','q','c','i'} will give result as 0 as it is the index of 'g' Searching for 22 in intArr[] = {10,20,15,22,35}; will give result as 3 as it is the index of 22 Searching for 1.5 in doubleArr[] = {10.2,15.1,2.2,3.5} will give result as -1 as it is the insertion point of 1.5 Searching for 35.0 in floatArr[] = {10.2f,15.1f,2.2f,3.5f} will give result as -5 as it is the insertion point of 35.0 Searching for 5 in shortArr[] = {10,20,15,22,35} will give result as -1 as it is the insertion point of 5> Det är den enklaste och mest effektiva metoden att hitta ett element i en sorterad array i Java
Syntax:
public static int binarySearch(data_type arr, data_type key)>
Kom ihåg: Här kan datatyp vara vilken som helst av de primitiva datatyperna som byte, char, double, int, float, short, long och även objekt.
Parametrar:
- Arrayen som ska genomsökas
- Värdet som ska sökas efter
Returtyp: index för söknyckeln, om den finns i arrayen; annars, (-(insättningspunkt) – 1). Insättningspunkten definieras som den punkt där nyckeln skulle infogas i arrayen: indexet för det första elementet större än nyckeln, eller a.length om alla element i arrayen är mindre än den specificerade nyckeln. Observera att detta garanterar att returvärdet blir>= 0 om och endast om nyckeln hittas.
Det finns vissa viktiga punkter att tänka på enligt följande:
- Om inmatningslistan inte är sorterad är resultaten odefinierade.
- Om det finns dubbletter finns det ingen garanti för vilken som kommer att hittas.
Som ovan har vi redan diskuterat att vi kan använda denna algoritm heller Arrays.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() fungerar för arrayer som också kan vara av primitiv datatyp. Samlingar .binarysearch() fungerar för objekt som samlingar som ArrayList och Länkad lista .
Exempel 1:
Java
inkapsling i java
// Java program to demonstrate working of Arrays.> // binarySearch() in a sorted array> // Importing Arrays class from> // java.util package> import> java.util.Arrays;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Declaring and initializing byte arrays> >// to search over them> >byte> byteArr[] = {>10>,>20>,>15>,>22>,>35> };> >char> charArr[] = {>'g'>,>'p'>,>'q'>,>'c'>,>'i'> };> >int> intArr[] = {>10>,>20>,>15>,>22>,>35> };> >double> doubleArr[] = {>10.2>,>15.1>,>2.2>,>3.5> };> >float> floatArr[] = {>10>.2f,>15>.1f,>2>.2f,>3>.5f };> >short> shortArr[] = {>10>,>20>,>15>,>22>,>35> };> >// Using sort() method of Arrays class> >// and passing arrays to be sorted as in arguments> >Arrays.sort(byteArr);> >Arrays.sort(charArr);> >Arrays.sort(intArr);> >Arrays.sort(doubleArr);> >Arrays.sort(floatArr);> >Arrays.sort(shortArr);> >// Primitive datatypes> >byte> byteKey =>35>;> >char> charKey =>'g'>;> >int> intKey =>22>;> >double> doubleKey =>1.5>;> >float> floatKey =>35>;> >short> shortKey =>5>;> >// Now in sorted array we will fetch and> >// return elements/indiciesaccessing indexes to show> >// array is really sorted> >// Print commands where we are implementing> >System.out.println(> >byteKey +>' found at index = '> >+ Arrays.binarySearch(byteArr, byteKey));> >System.out.println(> >charKey +>' found at index = '> >+ Arrays.binarySearch(charArr, charKey));> >System.out.println(> >intKey +>' found at index = '> >+ Arrays.binarySearch(intArr, intKey));> >System.out.println(> >doubleKey +>' found at index = '> >+ Arrays.binarySearch(doubleArr, doubleKey));> >System.out.println(> >floatKey +>' found at index = '> >+ Arrays.binarySearch(floatArr, floatKey));> >System.out.println(> >shortKey +>' found at index = '> >+ Arrays.binarySearch(shortArr, shortKey));> >}> }> |
>
>Produktion
35 found at index = 4 g found at index = 1 22 found at index = 3 1.5 found at index = -1 35.0 found at index = -5 5 found at index = -1>
Komplexitetsanalys:
Tidskomplexitet:
Tidskomplexiteten för metoden Arrays.binarySearch() är O(log n) där n är längden på inmatningsmatrisen. Detta beror på att metoden använder binär sökalgoritm för att hitta målelementet i den sorterade matrisen.
Hjälputrymme:
Det extra utrymmet som används av metoden Arrays.binarySearch() är O(1) eftersom det inte kräver något extra utrymme förutom indatamatrisen för att utföra sökoperationen.
Det finns varianter av denna metod där vi också kan specificera intervallet för array att söka i. Vi kommer att diskutera det såväl som att söka i en Object array i ytterligare inlägg.
Exempel 2:
sorterad tuppel python
Java
konvertera sträng till json-objekt
// Java Program to Illustrate binarySearch() method> // of Collections class> // Importing required classes> import> java.util.ArrayList;> import> java.util.Collections;> import> java.util.List;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating empty List> >List al =>new> ArrayList();> >// Adding elements to the List> >al.add(>12>);> >al.add(>53>);> >al.add(>23>);> >al.add(>46>);> >al.add(>54>);> >// Using binarySearch() method of Collections class> >// over random inserted element and storing the> >// index> >int> index = Collections.binarySearch(al,>23>);> >// Print and display the index> >System.out.print(index);> >}> }> |
>
>Produktion
2>
Komplexitetsanalys:
Tidskomplexitet:
Tidskomplexiteten för metoden binarySearch() i klassen Collections är O(log n) där n är antalet element i listan.
Hjälputrymme:
Metoden binarySearch() i klassen Collections kräver inget extra utrymme och har därför en extra utrymmeskomplexitet på O(1).