Как проверить, есть ли значение в массиве
Короткий ответ
У массивов нет метода contains(). Для массива объектов проще всего обернуть его в список:
void main() {
String[] colors = {"red", "green", "blue"};
IO.println(Arrays.asList(colors).contains("green"));
IO.println(Arrays.asList(colors).contains("black"));
}Результат:
true
falseМассив чисел
Для int[] используйте поток:
void main() {
int[] numbers = {4, 8, 15, 16};
IO.println(Arrays.stream(numbers).anyMatch(n -> n == 15));
}Результат:
trueОбычный цикл
Цикл понятен и находит позицию элемента:
int indexOf(int[] array, int value) {
for (int i = 0; i < array.length; i++) {
if (array[i] == value) {
return i;
}
}
return -1;
}
void main() {
int[] numbers = {4, 8, 15, 16};
IO.println(indexOf(numbers, 15));
IO.println(indexOf(numbers, 42));
}Результат:
2
-1Отсортированный массив
В отсортированном массиве Arrays.binarySearch() находит элемент очень быстро. Неотрицательный результат — индекс найденного элемента:
void main() {
int[] sorted = {2, 5, 9, 14, 20};
IO.println(Arrays.binarySearch(sorted, 14));
IO.println(Arrays.binarySearch(sorted, 7) >= 0);
}Результат:
3
falseЧастая ошибка
Вызвать Arrays.asList() у int[]. Получается список из одного элемента — самого массива, — и поиск всегда даёт false:
void main() {
int[] numbers = {1, 2, 3};
IO.println(Arrays.asList(numbers).size());
IO.println(Arrays.asList(numbers).contains(2));
}Результат:
1
falseФункции из этого ответа
- Arrays.stream() — Создаёт поток (stream) из массива — для сумм, фильтров и преобразований.
- Arrays.binarySearch() — Быстро ищет значение в отсортированном массиве делением пополам.
- List.contains() — Проверяет, есть ли элемент в списке.
- Arrays.asList() — Возвращает список фиксированного размера, который работает поверх массива.