Как проверить есть ли элемент в массиве java

от admin

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Java: проверьте, содержит ли массив значение или элемент

Введение В Java или на любом другом языке программирования обычно проверяют, содержит ли массив значение. Это одна из вещей, которую обычно усваивают новички, и в целом это полезно знать. В этой статье мы рассмотрим, как проверить, содержит ли массив значение или элемент в Java. * Arrays.asList (). Contains () * Использование цикла for * Collections.binarySearch () * API потока Java 8 * Apache Commons — ArrayUtils Arrays.asList (). Contains () T

Время чтения: 4 мин.

Вступление

Будь то Java или любой другой язык программирования, обычно проверяют, содержит ли массив значение. Это одна из вещей, которую обычно усваивают новички, и в целом это полезно знать.

В этой статье мы рассмотрим, как проверить, содержит ли массив значение или элемент в Java .

Arrays.asList (). Contains ()

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

Сначала мы конвертируем массив в ArrayList . Существуют различные способы преобразования массива Java в ArrayList , однако мы будем использовать наиболее широко используемый подход.

Затем мы можем использовать метод contains() для результирующего ArrayList , который возвращает логическое значение, указывающее, содержит ли список переданный нам элемент или нет.

Массив Integer типа:

Выполнение этого кода приводит к:

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

Более простой и ручной подход к решению проблемы — использование цикла for В худшем случае он выполнит итерацию по всему массиву один раз, проверяя, присутствует ли элемент.

Начнем сначала с примитивных целых чисел:

Для found переменной изначально установлено значение false потому что единственный способ вернуть true это найти элемент и явно присвоить новое значение логическому элементу. Здесь мы просто сравниваем каждый элемент массива со значением, которое ищем, и возвращаем true если они совпадают:

Для строк и настраиваемых объектов, которые могут быть в вашем коде, вы должны использовать другой оператор сравнения. Предполагая, что вы действительно переопределили метод equals() , вы можете использовать его, чтобы проверить, равен ли объект другому, возвращая true если они:

Выполнение этого кода приведет к:

Collections.binarySearch ()

Кроме того, мы можем найти конкретное значение, используя встроенный метод binarySearch() из класса Collections Проблема с двоичным поиском в том, что он требует сортировки нашего массива. Если наш массив отсортирован , хотя, binarySearch() превосходит как Arrays.asList().contains() и для петли подходов.

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

binarySearch() имеет много перегруженных вариантов в зависимости от используемых типов и наших собственных требований, но наиболее общий из них:

Где a представляет массив, и key указанное значение, которое мы ищем.

Теперь возвращаемое значение может немного сбивать с толку, поэтому лучше иметь в виду официальную документацию Oracle:

Возвращаемое значение этого метода — индекс искомого ключа, если он содержится в массиве; в противном случае (- ( точка вставки ) — 1), где точка вставки определяется как точка, в которой ключ будет вставлен в массив: индекс первого элемента больше, чем ключ, или a.length если все элементы в массив меньше указанного ключа.

Давайте попробуем это:

Первый элемент находится в позиции 1 . Второй элемент не найден и будет вставлен в позицию 5 — в конец массива. Возвращаемое значение -(insertion point)-1 , поэтому возвращаемое значение оказывается -6 .

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

Java 8 Stream API

Java 8 Stream API очень универсален и предлагает краткие решения различных задач, связанных с обработкой коллекций объектов. Для большинства задач использование Streams является естественным и интуитивно понятным.

Давайте посмотрим, как мы можем использовать Stream API, чтобы проверить, содержит ли массив целое число:

И чтобы сделать это со строками или настраиваемыми объектами:

Или вы можете сделать это короче, используя ссылку на метод:

Оба они выведут:

Apache Commons — ArrayUtils

Библиотека Apache Commons предоставляет множество новых интерфейсов, реализаций и классов, расширяющих базовую платформу Java Framework, и присутствует во многих проектах.

Класс ArrayUtils представляет множество методов для управления массивами, включая метод contains() :

Заключение

В этой статье мы рассмотрели несколько способов проверить, содержит ли массив в Java определенный элемент или значение. Мы рассмотрели преобразование массива в список и вызов contains() с использованием цикла for, Java 8 Stream API, а также Apache Commons.

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

В этом посте будет обсуждаться, как проверить, содержит ли примитив или массив объектов определенное значение или нет в Java.

1. Линейный поиск

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

Читать:
Slave вход что такое

⮚ Для примитивных массивов

⮚ Для массивов объектов

2. Использование потока Java 8

Мы можем использовать Java 8 Stream, чтобы проверить, содержит ли массив определенное значение, как показано ниже:

⮚ Для примитивных массивов

Или с помощью фильтров:

⮚ Для массивов объектов

Или с помощью фильтров:

3. Преобразовать в набор или список

Идея состоит в том, чтобы обернуть данный массив в список и использовать List.contains() который возвращает true если этот список содержит указанный элемент. Мы также можем использовать set вместо List.

⮚ Для примитивных массивов

⮚ Для массивов объектов

4. Алгоритм бинарного поиска

Для отсортированных массивов мы можем использовать бинарный поиск для поиска в массиве определенного значения. Алгоритм бинарного поиска возвращает индекс указанного элемента, присутствующего в массиве; в противном случае возвращается отрицательное значение. Мы можем определить, содержит ли массив элемент, просто проверив, больше ли вычисленный индекс или равен нулю.

⮚ Для примитивных массивов

⮚ Для массивов объектов

5. Использование Apache Commons Lang

Apache Commons Ланг ArrayUtils класс содержит несколько статических служебных методов, которые работают с массивами примитивов или объектов. Он обеспечивает contains() метод, который проверяет, присутствует ли заданное значение в массиве или нет.

⮚ Для примитивных массивов

⮚ Для массивов объектов

6. Использование библиотеки Guava

⮚ Для примитивных массивов

Библиотека Guava предоставляет несколько служебных классов, относящихся к примитивам, например Ints для инт, Longs надолго, Doubles на двоих, Floats для поплавка, Booleans для логического значения и так далее.

Каждый класс полезности имеет indexOf() метод, который возвращает индекс первого появления цели в массиве. Мы можем определить, содержит ли массив элемент, проверив, больше ли возвращаемый индекс или равен нулю.

⮚ Для массивов объектов

Guava’s Iterables класс содержит статический служебный метод indexOf(Iterator, Predicate) который возвращает индекс первого элемента, удовлетворяющего предоставленному предикату, или -1, если итератор не имеет таких элементов.

How do I determine whether an array contains a particular value in Java?

Given String s , is there a good way of testing whether VALUES contains s ?

Mike Sickler's user avatar

30 Answers 30

Warning: this doesn’t work for arrays of primitives (see the comments).

Since java-8 you can now use Streams.

To check whether an array of int , double or long contains a value use IntStream , DoubleStream or LongStream respectively.

Example

Ray Hulha's user avatar

Concise update for Java SE 9

Reference arrays are bad. For this case we are after a set. Since Java SE 9 we have Set.of .

"Given String s, is there a good way of testing whether VALUES contains s?"

The right type, immutable, O(1) and concise. Beautiful.*

Original answer details

Just to clear the code up to start with. We have (corrected):

This is a mutable static which FindBugs will tell you is very naughty. Do not modify statics and do not allow other code to do so also. At an absolute minimum, the field should be private:

(Note, you can actually drop the new String[]; bit.)

Reference arrays are still bad and we want a set:

(Paranoid people, such as myself, may feel more at ease if this was wrapped in Collections.unmodifiableSet — it could then even be made public.)

(*To be a little more on brand, the collections API is predictably still missing immutable collection types and the syntax is still far too verbose, for my tastes.)

Класс ArrayList. Методы, определяющие информацию об элементах массива

С помощью метода get() можно получить элемент в заданной позиции. Объявление метода следующее:

  • E – тип элементов массива;
  • index – позиция элемента в массиве начиная с 0.

Пример.

Результат выполнения программы

2. Метод contains() .Определить, содержит ли список определенный элемент

Метод contains() возвращает true , если в списке содержится хотя бы один указанный элемент. Согласно документации Java общая форма метода следующая

  • obj – элемент, наличие которого в коллекции необходимо определить.

Пример. В примере определяется наличие строки «abcd» в массиве строк.

  • obj – коллекция, элементы которой необходимо проверить на наличие в текущей коллекции.

Если все элементы коллекции obj встречаются хотя бы один раз в текущей коллекции, метод возвращает true . Если хотя бы одного элемента нет в коллекции, метод возвращает false .

Пример. В примере формируются две коллекции. Затем происходит проверка наличия одной коллекции в другой.

  • obj – элемент, позицию которого нужно определить.

Если элемент obj не найден в массиве, то возвращается значение -1.

Пример.

  • E – тип элементов массива.

Пример. В нашем примере формируется массив символов. Затем с помощью итератора и их методов hasNext() и next() происходит обход массива.

Похожие статьи