Как найти индекс элемента в массиве int? - PullRequest
72 голосов
/ 30 мая 2011

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

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

Ответы [ 16 ]

120 голосов
/ 30 мая 2011
Integer[] array = {1,2,3,4,5,6};

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

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

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

25 голосов
/ 13 октября 2012

Другой вариант, если вы используете Guava Collections, - 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);

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

16 голосов
/ 30 мая 2011

Посмотрите на API и он говорит, что сначала нужно отсортировать массив

Итак:

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

Если вы не хотите сортироватьмассив:

public int find(double[] array, double value) {
    for(int i=0; i<array.length; i++) 
         if(array[i] == value)
             return i;
}
12 голосов
/ 09 декабря 2015

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

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

Вызовите этот метод с передачей двух значений параметра Array и value и сохраните возвращаемое значение в целочисленной переменной.

int indexNum = getArrayIndex(array,value);

Спасибо

3 голосов
/ 30 мая 2011

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

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

  return -1;
}//met

Альтернативным методом может быть сопоставление всех индексов для каждого значения на карте.

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

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

С уважением, Stéphane

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

3 голосов
/ 30 мая 2011

Вы можете преобразовать его в список, а затем использовать метод 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)

2 голосов
/ 18 сентября 2018

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

static int findIndexOf(int V, int[] arr) {
        return IntStream.range(1, arr.length).filter(i->arr[i]==V).findFirst().getAsInt();
    }
1 голос
/ 19 декабря 2018
    Integer[] arr = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
    List<Integer> arrlst = Arrays.asList(arr);
    System.out.println(arrlst.lastIndexOf(1));
1 голос
/ 17 августа 2016

Простой:

public int getArrayIndex(int[] arr,int value) {
    for(int i=0;i<arr.length;i++)
        if(arr[i]==value) return i;
    return -1;
}
0 голосов
/ 22 октября 2018
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...