Как найти индекс элемента в массиве int?

Как найти индекс определенного значения в массиве Java типа int?

Я пробовал использовать Arrays.binarySearch на моем несортированном массиве, он только иногда дает правильный ответ.

Комментарии к вопросу (7)
Integer[] array = {1,2,3,4,5,6};

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

Обратите внимание, что это решение потокобезопасно, поскольку создает новый объект типа List.

Также вы не захотите вызывать эту процедуру в цикле или что-то подобное, так как вы будете создавать новый объект каждый раз, когда

Комментарии (5)

Другой вариант, если вы используете коллекций гуава ИНЦ.метод 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);

Это отличный выбор, когда пространство, время и повторное использование кода на премиум. Это также очень лаконична.

Комментарии (0)

Посмотрите на [АПИ][1] и он сказал, что нужно отсортировать массив сначала

Так:

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

Если вы Don'т хотите, чтобы отсортировать массив:


public int find(double[] array, double value) {
    for(int i=0; i
Комментарии (2)

Скопируйте этот метод в вашем классе


 public int getArrayIndex(int[] arr,int value) {

        int k=0;
        for(int i=0;i
Комментарии (0)

Нужно отсортировать значения перед использованием бинарного поиска. В противном случае ручной способ-попробовать все Интс в разделе.

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

  return -1;
}//met

В качестве альтернативного метода для отображения всех индексов для каждого значения в карте<целое число, целое и GT;.

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

а потом карту.вам(значение), чтобы получить индекс.

С уважением, СтéСтефан

@пст, спасибо за ваши комментарии. Вы можете разместить другой альтернативный способ ?

Комментарии (1)

Вы можете преобразовать его в список, а затем использовать метод indexOf:

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)

Комментарии (1)

Вы можете использовать современные Java, чтобы решить эту проблему. Пожалуйста, используйте код ниже:

static int findIndexOf(int V, int[] arr) {
        return IntStream.range(1, arr.length).filter(i->arr[i]==V).findFirst().getAsInt();
    }
Комментарии (0)
    Integer[] arr = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
    List arrlst = Arrays.asList(arr);
    System.out.println(arrlst.lastIndexOf(1));
Комментарии (0)

Простой:


public int getArrayIndex(int[] arr,int value) {
    for(int i=0;i
Комментарии (0)

В случае, если кто до сих пор ищу ответ-

  1. Вы можете использовать ArrayUtils.метод indexOf() из библиотека Апач Викискладе.

  2. Если вы используете Java 8, вы также можете использовать API Strean:

публичный статический тип int метод indexOf(тип int[] массив, инт valueToFind) { если (массив == значение null) { возврат -1; } возвращение IntStream.диапазон(0, массив.длина) .фильтра(я -> valueToFind == массив[я]) .метод findfirst() .иначе(-1); }

Комментарии (0)
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)

Двоичный поиск: двоичный поиск также может быть использован, чтобы найти индекс элемента массива в массив. Но бинарный поиск может быть использован, только если массив не будет отсортирован. Java предоставляет нам встроенные функции, который может быть найден в библиотеке массивов Java, который будет rreturn индекса, если элемент присутствует, то она возвращает -1. Сложность будет o(зарегистрируйте N). Ниже приводится реализация бинарного поиска.

public static int findIndex(int arr[], int t) { 
   int index = Arrays.binarySearch(arr, t); 
   return (index < 0) ? -1 : index; 
} 
Комментарии (0)

Вы можете сделать это такой:

 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;

}

}

Добавлено гаммирования :)

Комментарии (4)
/**
     * 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 list = new ArrayList(Arrays.asList(stringArray));
            int index = list.indexOf(name);
            list.clear();
            return index;
        }
        return -1;
    }
Комментарии (1)

Вы можете либо пройтись по массиву, пока не найдете нужный индекс, либо использовать List. Обратите внимание, что вы можете преобразовать массив в список с помощью asList().

Комментарии (0)

В методе Main, используя для петли: -третий цикл в моем примере-это ответ на этот вопрос. -в моем примере я сделал массив из 20 случайных целых чисел, присвоить переменной наименьшее число, и остановить цикл, когда местоположение массива достиг наименьшего значения при подсчете количества петель.

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 == 
                break;
            }
            location ++;
        }
        System.out.println("location: " + location + "\nsmallest: " + smallest);
    }
}

Выходы кода все цифры и их расположение и расположение мельчайших номер и наименьшее количество.

Комментарии (0)
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;
    }
}
Комментарии (1)