Итерация через массив - 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;
}
Спасибо за помощь в продвижении!
Ответы
Ответ 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. В вашем случае вы можете не захотеть создавать новый метод для однострочной операции, если только вы не хотите использовать его в качестве утилиты. Надеюсь это поможет!