it-swarm.com.de

Wie finde ich den Index eines Elements in einem int-Array?

Wie kann ich einen Index eines bestimmten Werts in einem Java-Array des Typs int finden?

Ich habe versucht, Arrays.binarySearch in meinem unsortierten Array zu verwenden, es gibt nur manchmal die richtige Antwort.

65
Jeomark
Integer[] array = {1,2,3,4,5,6};

Arrays.asList(array).indexOf(4);

Beachten Sie, dass diese Lösung threadsicher ist, da ein neues Objekt vom Typ Liste erstellt wird. 

Sie möchten dies auch nicht in einer Schleife oder in etwas Ähnlichem aufrufen, da Sie jedes Mal ein neues Objekt erstellen würden

116
Pablo Fernandez

Eine weitere Option, wenn Sie Guava Collections verwenden, ist 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);

Dies ist eine großartige Wahl, wenn Platz, Zeit und Wiederverwendung von Code von größter Bedeutung sind. Es ist auch sehr knapp.

24
btiernay

Ein Blick auf die API gibt an, dass Sie zuerst das Array sortieren müssen 

So:

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

Wenn Sie das Array nicht sortieren möchten:

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

Kopieren Sie diese Methode in Ihre Klasse 

 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;
}

Rufen Sie diese Methode mit pass zwei perameters Array und value auf und speichern Sie ihren Rückgabewert in einer Integer-Variablen.

int indexNum = getArrayIndex(array,value);

Vielen Dank

11
Dalvinder Singh

Sie können es in eine Liste konvertieren und dann die Methode indexOf verwenden:

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 )

3
agmcleod

Sie müssen die Werte sortieren, bevor Sie die binäre Suche verwenden. Ansonsten besteht die manuelle Möglichkeit darin, alle Elemente in Ihrem Tab zu testen.

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

  return -1;
}//met

Eine alternative Methode könnte darin bestehen, den gesamten Index für jeden Wert in einer Karte abzubilden. 

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

und dann map.get (value), um den Index abzurufen.

Viele Grüße, Stéphane

@pst, danke für deine Kommentare. Kannst du eine andere alternative Methode posten?

3
Snicolas

Einfach:

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

Sie können modernes Java verwenden, um dieses Problem zu lösen. Bitte benutzen Sie den folgenden Code:

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

Sie können entweder durch das Array gehen, bis Sie den gesuchten Index finden, oder stattdessen eine List verwenden. Beachten Sie, dass Sie das Array mit asList() in eine Liste umwandeln können.

0
rid
    Integer[] arr = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
    List<Integer> arrlst = Arrays.asList(arr);
    System.out.println(arrlst.lastIndexOf(1));
0
alok
/**
     * 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;
    }
0
Manmohan Soni

Sie können es so machen:

 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;

}

}

XOR hinzugefügt :)

0
Andre

In der Hauptmethode, die for-Schleifen verwendet: - Die dritte for-Schleife in meinem Beispiel ist die Antwort auf diese Frage .- In meinem Beispiel habe ich ein Array mit 20 zufälligen Ganzzahlen erstellt, einer Variablen die kleinste Zahl zugewiesen und Die Schleife wurde angehalten, als die Position des Arrays den kleinsten Wert erreichte, während die Anzahl der Schleifen gezählt wurde.

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 gibt alle Zahlen und deren Positionen sowie die Position der kleinsten Nummer gefolgt von der kleinsten Nummer aus.

0
extremeoats

Falls noch jemand nach der Antwort sucht,

  1. Sie können ArrayUtils.indexOf () aus der [Apache Commons Library] [1] verwenden.

  2. Wenn Sie Java 8 verwenden, können Sie auch die Streaming-API verwenden:

    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)

0
Deep Shah
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;
}
0
Rahul9191