Поиск по сайту:

Как проверить, содержит ли массив Java значение?


Как проверить, содержит ли массив Java значение?

Есть много способов проверить, содержит ли массив Java определенное значение.

  • Простая итерация с использованием цикла for
  • Список содержит метод()
  • Потоковая передача метода anyMatch()
  • Arrays binarySearch() для отсортированного массива

Давайте рассмотрим все эти методы по одному.

1. Использование цикла for

Это самый простой и удобный способ проверить, содержит ли массив определенное значение или нет. Мы пройдемся по элементам массива, используя метод equals(), чтобы проверить, равен ли элемент массива заданному значению.

String[] vowels = { "A", "I", "E", "O", "U" };

// using simple iteration over the array elements
for (String s : vowels) {
	if ("E".equals(s)) {
		System.out.println("E found in the vowels list.");
	}
}

2. Использование метода List contains()

Мы можем использовать JShell для запуска фрагмента кода примера.

jshell> String[] vowels = { "A", "I", "E", "O", "U" };
vowels ==> String[5] { "A", "I", "E", "O", "U" }

jshell> List vowelsList = Arrays.asList(vowels);
vowelsList ==> [A, I, E, O, U]

jshell> vowelsList.contains("U")
$3 ==> true

jshell> vowelsList.contains("X")
$4 ==> false

3. Использование метода Stream anyMatch()

Если вы используете лямбда-выражение, чтобы проверить, содержит ли оно заданное значение.

jshell> List vowelsList = Arrays.asList(vowels);
vowelsList ==> [A, I, E, O, U]

jshell> Arrays.stream(vowels).anyMatch("O"::equals);
$5 ==> true

jshell> Arrays.stream(vowels).anyMatch("X"::equals);
$6 ==> false

4. Массивы binarySearch() для отсортированного массива

Если ваш массив отсортирован, вы можете использовать метод Arrays binarySearch(), чтобы проверить, содержит ли массив заданное значение или нет.

String[] vowels = { "A", "I", "E", "O", "U" };

System.out.println("Unsorted Array = " + Arrays.toString(vowels));

Arrays.parallelSort(vowels);

System.out.println("Sorted Array = " + Arrays.toString(vowels));

int index = Arrays.binarySearch(vowels, "X");

if (index < 0) {
	System.out.println("X not found in the array");
} else {
	System.out.println("X found in the array");
}

Выход:

Unsorted Array = [A, I, E, O, U]
Sorted Array = [A, E, I, O, U]
X not found in the array

Проверка, содержит ли массив несколько значений

Что, если мы хотим проверить, содержит ли массив несколько значений. Допустим, вы хотите проверить, является ли данный массив подмножеством исходного массива. Мы можем создавать вложенные циклы и проверять каждый элемент один за другим. Существует более чистый способ преобразования массивов в список, а затем использование метода containsAll().

String[] vowels = { "A", "I", "E", "O", "U" };
String[] subset = { "E", "U" };

boolean foundAll = Arrays.asList(vowels).containsAll(Arrays.asList(subset));

System.out.println("vowels contains all the elements in subset = " + foundAll);

Вывод: гласные содержат все элементы в подмножестве=истина

Рекомендации

  1. Документация по API Arrays binarySearch()
  2. Потоковая передача документа API anyMatch()