/
Вопросы и ответы
/
Java
/

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

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

5 лет назад

Человек-Молекула

Ответы

2

Чтобы найти индекс элемента в массиве в Java, можно воспользоваться циклом for и проверять каждый элемент на равенство искомому. Как только элемент будет найден, можно вернуть его индекс. Если элемент не найден, можно вернуть -1 или выбросить исключение.

Вот пример кода:

1
2
3
4
5
6
7
8
public static int findIndex(int[] arr, int element) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == element) {
            return i;
        }
    }
    return -1; // если элемент не найден
}

4 года назад

Иван Полежаев

1

Для Ивана Полежаева: а что, у класса Arrays есть такой метод? где почитать? Здесь (https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html) что-то не нашла... у ArrayList вижу.

3 года назад

Юлия

0

Для того, чтобы найти индекс элемента в массиве в Java, можно использовать метод indexOf класса java.util.Arrays Этот метод принимает на вход массив и искомый элемент, и возвращает индекс первого вхождения элемента в массиве. Если элемент не найден, метод возвращает -1.

Например, чтобы найти индекс числа 42 в массиве numbers, можно написать следующий код:

1
2
int[] numbers = {10, 20, 30, 40, 42, 50};
int index = Arrays.indexOf(myArray, 42); // 4

4 года назад

Иван Полежаев

0

Готового метода indexOf у массивов в Java нет. В классе java.util.Arrays его тоже нет — в комментарии к старому ответу это верно заметили. Индекс ищут циклом:

1
2
3
4
5
6
7
8
9
10
11
12
public static int indexOf(int[] arr, int value) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == value) {
            return i;
        }
    }
    return -1;
}

int[] numbers = {4, 8, 15, 16};
System.out.println(indexOf(numbers, 15)); // 2
System.out.println(indexOf(numbers, 42)); // -1

-1 — общепринятый ответ «элемента нет».

Массив строк и объектов

Объекты сравнивают через equals(). Оператор == проверяет, что это один и тот же объект в памяти:

1
2
String[] names = {"Анна", "Олег"};
int idx = Arrays.asList(names).indexOf("Олег"); // 1

Arrays.asList() превращает массив в список, и у списка уже есть indexOf(). С массивом примитивов int[] этот способ не сработает: Arrays.asList(numbers) вернёт список из одного элемента — самого массива.

Через Stream API

1
2
3
4
5
6
import java.util.stream.IntStream;

int idx = IntStream.range(0, numbers.length)
        .filter(i -> numbers[i] == 15)
        .findFirst()
        .orElse(-1); // 2

Отсортированный массив

Arrays.binarySearch() находит элемент за логарифмическое время:

1
2
int[] sorted = {1, 3, 5, 7, 9};
int idx = Arrays.binarySearch(sorted, 7); // 3

На неотсортированном массиве результат непредсказуем. Если элемента нет, метод вернёт отрицательное число.

Библиотека Apache Commons Lang

Если библиотека уже подключена в проекте: ArrayUtils.indexOf(numbers, 15).

Последнее вхождение

Цикл с конца массива: for (int i = arr.length - 1; i >= 0; i--). У списка есть готовый lastIndexOf().

Массивы и циклы разбирают в бесплатном курсе «Основы Java».

3 дня назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845