Hoe vind je de index van een element in een int-array?

Hoe vind ik een index van een bepaalde waarde in een Java-array van het type int?

Ik heb geprobeerd Arrays.binarySearchte gebruiken op mijn ongesorteerde array, maar soms krijg ik het juiste antwoord.


Antwoord 1, autoriteit 100%

Integer[] array = {1,2,3,4,5,6};
Arrays.asList(array).indexOf(4);

Houd er rekening mee dat deze oplossing threadsafe is omdat er een nieuw object van het type List wordt gemaakt.

Je wilt dit ook niet in een lus of iets dergelijks aanroepen, omdat je dan elke keer een nieuw object zou maken


Antwoord 2, autoriteit 18%

Een andere optie als u Guava Collections gebruikt, is Ints.indexOf

// Perfect storm:
final int needle = 42;
final int[] haystack = [1, 2, 3, 42];
// Spoiler alert: index == 3
final int index = Ints.indexOf(haystack, needle);

Dit is een uitstekende keuze wanneer ruimte, tijd en hergebruik van code een hoge prioriteit hebben. Het is ook erg beknopt.


Antwoord 3, autoriteit 15%

Een blik op de APIen er staat dat je de array eerst moet sorteren

Dus:

Arrays.sort(array);
Arrays.binarySearch(array, value);

Als u de array niet wilt sorteren:

public int find(double[] array, double value) {
    for(int i=0; i<array.length; i++) 
         if(array[i] == value)
             return i;
}

Antwoord 4, autoriteit 10%

Kopieer deze methode naar je klas

public int getArrayIndex(int[] arr,int value) {
        int k=0;
        for(int i=0;i<arr.length;i++){
            if(arr[i]==value){
                k=i;
                break;
            }
        }
    return k;
}

Noem deze methode met pass twee parameters Array en value en sla de geretourneerde waarde op in een integer-variabele.

int indexNum = getArrayIndex(array,value);

Bedankt


Antwoord 5, autoriteit 4%

ArrayUtils.indexOf(array, value);
Ints.indexOf(array, value);
Arrays.asList(array).indexOf(value);

Antwoord 6, autoriteit 4%

U kunt moderne Java gebruiken om dit probleem op te lossen. Gebruik de onderstaande code:

static int findIndexOf(int V, int[] arr) {
    return IntStream.range(0, arr.length)
                    .filter(i->arr[i]==V)
                    .findFirst()
                    .getAsInt();
}

Antwoord 7, autoriteit 2%

Je zou het naar een lijst kunnen converteren en dan de indexOf-methode gebruiken:

Array.asList(array).indexOf(1); 

http:// download.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html#asList(T…)
http:/ /download.oracle.com/javase/1.5.0/docs/api/java/util/List.html#indexOf(java.lang.Object)


Antwoord 8, autoriteit 2%

U moet waarden sorteren voordat u binair zoeken gebruikt. Anders is de handmatige manier om alle ints op je tabblad te proberen.

public int getIndexOf( int toSearch, int[] tab )
{
  for( int i=0; i< tab.length ; i ++ )
    if( tab[ i ] == toSearch)
     return i;
  return -1;
}//met

Een alternatieve methode zou kunnen zijn om alle indexen voor elke waarde in een kaart toe te wijzen.

tab[ index ] = value;
if( map.get( value) == null || map.get( value) > index )
    map.put( value, index );

en dan map.get(value) om de index te krijgen.

Met vriendelijke groet,
Stephane

@pst, bedankt voor je opmerkingen. Kun je een andere alternatieve methode posten?


Antwoord 9

Eenvoudig:

public int getArrayIndex(int[] arr,int value) {
    for(int i=0;i<arr.length;i++)
        if(arr[i]==value) return i;
    return -1;
}

Antwoord 10

   Integer[] arr = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
    List<Integer> arrlst = Arrays.asList(arr);
    System.out.println(arrlst.lastIndexOf(1));

Antwoord 11

Voor het geval iemand nog steeds op zoek is naar het antwoord-

  1. U kunt ArrayUtils.indexOf() uit de [Apache Commons Library][1] gebruiken.

  2. Als je Java 8 gebruikt, kun je ook de Strean API gebruiken:

    public static int indexOf(int[] array, int valueToFind) {
        if (array == null) {
            return -1;
        }
        return IntStream.range(0, array.length)
                .filter(i -> valueToFind == array[i])
                .findFirst()
                .orElse(-1);
    }
    

    [1]: https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/ArrayUtils.html#indexOf(int [],%20int)


Antwoord 12

De gemakkelijkste manier is om te herhalen. We willen bijvoorbeeld de minimale waarde van array en zijn index vinden:

public static Pair<Integer, Integer> getMinimumAndIndex(int[] array) {
        int min = array[0];
        int index = 0;
        for (int i = 1; i < array.length; i++) {
            if (array[i] < min) {
                min = array[i];
                index = i;
            }
            return new Pair<min, index>;

Op deze manier test je alle array-waarden en als sommige minimaal zijn, weet je ook de minima-index.
Het kan hetzelfde werken met het zoeken naar een waarde:

public static int indexOfNumber(int[] array) {
        int index = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] == 77) {        // here you pass some value for example 77
                index = i;
            }
        }
        return index;
    }

Antwoord 13

U kunt door de array lopen totdat u de index vindt die u zoekt, of gebruik een Listin plaats daarvan. Merk op dat u de array in een lijst kunt transformeren met asList().


Antwoord 14

/**
     * Method to get the index of the given item from the list
     * @param stringArray
     * @param name
     * @return index of the item if item exists else return -1
     */
    public static int getIndexOfItemInArray(String[] stringArray, String name) {
        if (stringArray != null && stringArray.length > 0) {
            ArrayList<String> list = new ArrayList<String>(Arrays.asList(stringArray));
            int index = list.indexOf(name);
            list.clear();
            return index;
        }
        return -1;
    }

Antwoord 15

U kunt het zo doen:

public class Test {
public static int Tab[]  = {33,44,55,66,7,88,44,11,23,45,32,12,95};
public static int search = 23;
public static void main(String[] args) {
    long stop = 0;
    long time = 0;
    long start = 0;
    start = System.nanoTime();
    int index = getIndexOf(search,Tab);
    stop = System.nanoTime();
    time = stop - start;
    System.out.println("equal to took in nano seconds ="+time);
    System.out.println("Index  of searched value is: "+index);
    System.out.println("De value of Tab with searched index is: "+Tab[index]);
    System.out.println("==========================================================");
    start = System.nanoTime();
    int Bindex = bitSearch(search,Tab);
    stop = System.nanoTime();
    time = stop - start;
    System.out.println("Binary search took nano seconds ="+time);
    System.out.println("Index  of searched value is: "+Bindex);
    System.out.println("De value of Tab with searched index is: "+Tab[Bindex]);
}
public static int getIndexOf( int toSearch, int[] tab ){
     int i = 0;
     while(!(tab[i] == toSearch) )
     {  i++; }
       return i; // or return tab[i];
   }
public static int bitSearch(int toSearch, int[] tab){
    int i = 0;
    for(;(toSearch^tab[i])!=0;i++){
    }
    return i;
}

}

Een XOR toegevoegd 🙂


Antwoord 16

In de hoofdmethode met for-lussen:
-de derde for-lus in mijn voorbeeld is het antwoord op deze vraag.
-in mijn voorbeeld heb ik een array van 20 willekeurige gehele getallen gemaakt, een variabele het kleinste getal toegewezen en de lus gestopt toen de locatie van de array de kleinste waarde bereikte terwijl ik het aantal lussen telde.

import java.util.Random;
public class scratch {
    public static void main(String[] args){
        Random rnd = new Random();
        int randomIntegers[] = new int[20];
        double smallest = randomIntegers[0];
        int location = 0;
        for(int i = 0; i < randomIntegers.length; i++){             // fills array with random integers
            randomIntegers[i] = rnd.nextInt(99) + 1;
            System.out.println(" --" + i + "-- " + randomIntegers[i]);
        }
        for (int i = 0; i < randomIntegers.length; i++){            // get the location of smallest number in the array 
            if(randomIntegers[i] < smallest){
                smallest = randomIntegers[i];                 
            }
        }
        for (int i = 0; i < randomIntegers.length; i++){                
            if(randomIntegers[i] == smallest){                      //break the loop when array location value == <smallest>
                break;
            }
            location ++;
        }
        System.out.println("location: " + location + "\nsmallest: " + smallest);
    }
}

Code geeft alle nummers en hun locaties weer, en de locatie van het kleinste nummer gevolgd door het kleinste nummer.


Antwoord 17

static int[] getIndex(int[] data, int number) {
    int[] positions = new int[data.length];
    if (data.length > 0) {
        int counter = 0;
        for(int i =0; i < data.length; i++) {
            if(data[i] == number){
                positions[counter] = i;
                counter++;
            }
        }
    }
    return positions;
}

Antwoord 18

Binair zoeken:Binair zoeken kan ook worden gebruikt om de index van het array-element in een array te vinden. Maar de binaire zoekactie kan alleen worden gebruikt als de array is gesorteerd. Java biedt ons een ingebouwde functie die kan worden gevonden in de Arrays-bibliotheek van Java, die de index zal retourneren als het element aanwezig is, anders wordt -1 geretourneerd. De complexiteit zal O(log n) zijn.
Hieronder vindt u de implementatie van binair zoeken.

public static int findIndex(int arr[], int t) { 
   int index = Arrays.binarySearch(arr, t); 
   return (index < 0) ? -1 : index; 
} 

Antwoord 19

Integer[] array = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < array.length; i++) {
    if (array[i] == 4) {
        system.out.println(i);
        break;
    }
}

Other episodes