Итерация через массив - java - программирование
Подтвердить что ты не робот

Итерация через массив - java

Мне было интересно, было бы лучше иметь метод для этого и передавать Array в этот метод или записывать его каждый раз, когда я хочу проверить, есть ли число в array.

Например:

public static boolean inArray(int[] array, int check) {

    for (int i = 0; i < array.length; i++) {
        if (array[i] == check) 
            return true;
    }

    return false;
}

Спасибо за помощь в продвижении!

4b9b3361

Ответ 1

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

Нет смысла повторять идентичный код несколько раз.

Кроме того, если вы поместите логику в метод и это изменится, вам нужно только изменить код в одном месте.

Независимо от того, хотите ли вы использовать стороннюю библиотеку, это совершенно другое решение.

Ответ 2

Начиная с версии Java 1.5.0 (Java 5), код может быть немного очищен. Array и все, что реализует Iterator (например, Collection s), может быть зациклено следующим образом:

public static boolean inArray(int[] array, int check) {
   for (int o : array){
      if (o == check) {
         return true;
      }
   }
   return false;
}

В Java 8 вы также можете сделать что-то вроде:

// import java.util.stream.IntStream;

public static boolean inArray(int[] array, int check) {
   return IntStream.of(array).anyMatch(val -> val == check);
}

Хотя преобразование в поток для этого, вероятно, излишне.

Ответ 3

Если вы используете массив (и чисто массив), поиск "содержит" равен O(N), потому что в худшем случае вы должны перебрать весь массив. Теперь, если массив отсортирован, вы можете использовать двоичный поиск, который сокращает время поиска до log(N) с накладными расходами сортировки.

Если это то, что вызывается повторно, поместите его в функцию:

private boolean inArray(int[] array, int value)
{  
     for (int i = 0; i < array.length; i++)
     {
        if (array[i] == value) 
        {
            return true;
        }
     }
    return false;  
}  

Ответ 4

Вы можете импортировать lib org.apache.commons.lang.ArrayUtils

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

содержит (int [] array, int valueToFind)         Проверяет, находится ли значение в заданном массиве.

ArrayUtils.contains(intArray, valueToFind);

API ArrayUtils

Ответ 5

Использование java 8 Stream API может упростить вашу работу.

public static boolean inArray(int[] array, int check) {
    return Stream.of(array).anyMatch(i -> i == check);
}

Просто у вас есть накладные расходы на создание нового Stream из Array, но это дает возможность использовать другой Stream API. В вашем случае вы можете не захотеть создавать новый метод для однострочной операции, если только вы не хотите использовать его в качестве утилиты. Надеюсь это поможет!