Как проверить наличие элемента в массиве java
Перейти к содержимому

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

  • автор:

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: Check if Array Contains Value or Element

Whether in Java, or any other programming language, it is a common occurrence to check if an array contains a value. This is one of the things that most beginners tend to learn, and it is a useful thing to know in general.

In this article, we'll take a look at how to check if an array contains a value or element in Java.

Arrays.asList().contains()

This is perhaps the most common way of solving this problem, just because it performs really well and is easy to implement.

First, we convert the array to an ArrayList . There are various ways to convert a Java array to an ArrayList, though, we'll be using the most widely used approach.

Then, we can use the contains() method on the resulting ArrayList , which returns a boolean signifying if the list contains the element we've passed to it or not.

Array of an Integer type:

Running this code results in:

Using a for-loop

A more basic and manual approach to solving the problem is by using a for loop. In worst case, it'll iterate the entire array once, checking if the element is present.

Let's start out with primitive integers first:

The found variable is initially set to false because the only way to return true would be to find the element and explicitly assign a new value to the boolean. Here, we simply compare each element of the array to the value we're searching for, and return true if they match:

For Strings, and custom Objects you might have in your code, you'd be using a different comparison operator. Assuming you've validly ovverriden the equals() method, you can use it to check if an object is equal to another, returning true if they are:

Running this code will result in:

Collections.binarySearch()

Additionally, we can find a specific value using a built-in method binarySearch() from the Collections class. The problem with binary search is that it requires our array be sorted. If our array is sorted though, binarySearch() outperforms both the Arrays.asList().contains() and the for-loop approaches.

If it's not sorted, the added time required to sort the array might make this approach less favorable, depending on the size of the array and the sorting algorithm used to sort it.

binarySearch() has many overloaded variants depending on the types used and our own requirements, but the most general one is:

Where a represents the array, and key the specified value we're looking for.

Free eBook: Git Essentials

Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!

Now, the return value might be a bit confusing, so it's best to take Oracle's official documentation in mind:

The return value of this method is the index of the searched key, if it is contained in the array; otherwise (-(insertion point) — 1), where insertion point is defined as the point at which the key would be inserted into the array: the index of the first element greater than the key, or a.length if all elements in the array are less than the specified key.

Let's try this out:

This will output:

The first element is found, at position 1 . The second element isn't found, and would be inserted at position 5 — at the end of the array. The return value is -(insertion point)-1 , so the return value ends up being -6 .

If the value is above equal to, or above 0 , the array contains the element, and it doesn't contain it otherwise.

Java 8 Stream API

The Java 8 Stream API is very versatile and offers for concise solutions to various tasks related to processing collections of objects. Using Streams for this type of task is natural and intuitive for most.

Let's take a look at how we can use the Stream API to check if an array contains an integer:

This will output:

And to do this with Strings or custom objects:

Or, you can make this shorter by using a method reference:

Both of these would output:

Apache Commons — ArrayUtils

The Apache Commons library provides many new interfaces, implementations and classes that expand on the core Java Framework, and is present in many projects.

The ArrayUtils class introduces many methods for manipulating arrays, including the contains() method:

This would result in:

Conclusion

In this article, we've gone over several ways to check whether an array in Java contains a certain element or value. We've gone over converting the array to a list and calling the contains() method, using a for-loop, the Java 8 Stream API, as well as Apache Commons.

Кофе-брейк #221. Три способа, как найти элемент в массиве Java. Что такое Java Thread Local и как его использовать

Кофе-брейк #221. Три способа, как найти элемент в массиве Java. Что такое Java Thread Local и как его использовать - 1

Источник: Asyncq Эта публикация поможет вам лучше узнать, какие существуют способы поиска элемента в массиве в Java. Поиск определенного элемента в наборе значений — очень распространенная и часто используемая операция в разработке программного обеспечения. Существуют разные подходы к решению этой проблемы, от простых до оптимизированных. Давайте их рассмотрим.

Вводные данные

Способ 1 (простой)

  1. Посещаем все элементы массива, поочередно по одному элементу.
  2. Дополнительно отслеживаем состояние целевого элемента, если он существует в массиве.
  3. Как только мы находим этот элемент, то переключаем статус с false на true .
  4. После завершения цикла возвращаем флаг состояния.

Способ 2

  1. Мы можем использовать ArrayList , содержащий метод, который по умолчанию ищет целевой элемент в списке.
  2. Поскольку этот метод предоставляется List , нам нужно преобразовать наш примитивный массив в список.
  3. Мы можем использовать одну лямбда-строку, которая преобразует примитив в тип объекта и создает из него список (list).
  4. Мы можем использовать Stream API Java 8, чтобы сделать наш код функциональным и намного короче.
  5. Чтобы понять, как Stream API работают с потоками, нам нужно преобразовать наш вводной массив в поток.
  6. Arrays.stream получает вводный массив и преобразует его в потоки.
  7. Теперь, когда у нас есть потоки, мы можем использовать множество полезных методов, один из которых — anyMatch . Он возвращает элемент, соответствующий предикату (id == inputId) .
  8. Все это делает наш код намного короче и легче для чтения.

Способ 3 (оптимизированный)

  1. Если с памятью нет проблем и мы хотим оптимизировать вычисления, то одна из вещей, которые мы можем здесь сделать, — это создать набор из вводного массива.
  2. Мы снова можем использовать код функционального стиля для преобразования примитивного массива в Set .
  3. Теперь, когда у нас есть Set , мы можем искать элемент в течение постоянного время.

Бонус

Что такое Java Thread Local и как его использовать

Кофе-брейк #221. Три способа, как найти элемент в массиве Java. Что такое Java Thread Local и как его использовать - 2

Источник: Medium В данной статье мы рассмотрим Java Thread Local и способы его эффективного использования в ваших Java-приложениях. Java Thread Local — это мощная функция, которая позволяет разработчикам создавать переменные только для определенного потока. Это означает, что у каждого потока может быть своя копия переменной, и изменения, внесенные в переменную в одном потоке, не повлияют на ее значение в другом потоке.

How to Check if Java Array Contains a Value?

How to Check if Java Array Contains a Value?

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

How to Check if Java Array Contains a Value?

There are many ways to check if a Java array contains a specific value.

  • Simple iteration using for loop
  • List contains() method
  • Stream anyMatch() method
  • Arrays binarySearch() for sorted array

Let’s look into all these methods one at a time.

1. Using For Loop

This is the easiest and convenient method to check if the array contains a certain value or not. We will go over the array elements using the for loop and use the equals() method to check if the array element is equal to the given value.

2. Using List contains() method

We can use Arrays class to get the list representation of the array. Then use the contains() method to check if the array contains the value. Let’s use JShell to run the example code snippet.

Java Array Contains Value

3. Using Stream anyMatch() Method

If you are using Java 8 or higher, you can create a stream from the array. Then use the anyMatch() method with a lambda expression to check if it contains a given value.

4. Arrays binarySearch() for sorted array

If your array is sorted, you can use the Arrays binarySearch() method to check if the array contains the given value or not.

Output:

Checking if Array Contains Multiple Values

What if we want to check if the array contains multiple values. Let’s say you want to check if a given array is the subset of the source array. We can create nested loops and check each element one by one. There is a cleaner way by converting arrays to list and then use the containsAll() method.

Output: vowels contains all the elements in subset = true

References

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *