- Проверьте, содержит ли массив определенное значение в Java
- 1. Линейный поиск
- 2. Использование потока Java 8
- 3. Преобразовать в набор или список
- 4. Алгоритм бинарного поиска
- 5. Использование Apache Commons Lang
- 6. Использование библиотеки Guava
- Rukovodstvo
- статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
- Java: проверьте, содержит ли массив значение или элемент
- Введение В Java или на любом другом языке программирования обычно проверяют, содержит ли массив значение. Это одна из вещей, которую обычно усваивают новички, и в целом это полезно знать. В этой статье мы рассмотрим, как проверить, содержит ли массив значение или элемент в Java. * Arrays.asList (). Contains () * Использование цикла for * Collections.binarySearch () * API потока Java 8 * Apache Commons — ArrayUtils Arrays.asList (). Contains () T
- Вступление
- Arrays.asList (). Contains ()
- Использование цикла for
- Collections.binarySearch ()
- Java 8 Stream API
- Apache Commons — ArrayUtils
- Заключение
- Java 8 Stream find
- 2. Stream findAny
- 3. Stream findFirst
Проверьте, содержит ли массив определенное значение в Java
В этом посте будет обсуждаться, как проверить, содержит ли примитив или массив объектов определенное значение или нет в Java.
1. Линейный поиск
Наивное решение состоит в том, чтобы выполнить линейный поиск в заданном массиве, чтобы проверить, присутствует ли конкретное значение в массиве или нет.
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, если итератор не имеет таких элементов.
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Java: проверьте, содержит ли массив значение или элемент
Введение В Java или на любом другом языке программирования обычно проверяют, содержит ли массив значение. Это одна из вещей, которую обычно усваивают новички, и в целом это полезно знать. В этой статье мы рассмотрим, как проверить, содержит ли массив значение или элемент в Java. * Arrays.asList (). Contains () * Использование цикла for * Collections.binarySearch () * API потока Java 8 * Apache Commons — ArrayUtils Arrays.asList (). Contains () T
Вступление
Будь то Java или любой другой язык программирования, обычно проверяют, содержит ли массив значение. Это одна из вещей, которую обычно усваивают новички, и в целом это полезно знать.
В этой статье мы рассмотрим, как проверить, содержит ли массив значение или элемент в Java .
Arrays.asList (). Contains ()
Это, пожалуй, самый распространенный способ решения этой проблемы просто потому, что он работает очень хорошо и его легко реализовать.
Сначала мы конвертируем массив в ArrayList . Существуют различные способы преобразования массива Java в ArrayList , однако мы будем использовать наиболее широко используемый подход.
Затем мы можем использовать метод contains() для результирующего ArrayList , который возвращает логическое значение, указывающее, содержит ли список переданный нам элемент или нет.
Integer[] intArray = new Integer[]; String[] nameArray = new String[]; List intList = new ArrayList<>(Arrays.asList(intArray)); List nameList = new ArrayList<>(Arrays.asList(nameArray)); System.out.println(intList.contains(12)); System.out.println(nameList.contains("John"));
Выполнение этого кода приводит к:
Использование цикла for
Более простой и ручной подход к решению проблемы — использование цикла for В худшем случае он выполнит итерацию по всему массиву один раз, проверяя, присутствует ли элемент.
Начнем сначала с примитивных целых чисел:
int[] intArray = new int[]; boolean found = false; int searchedValue = 2; for(int x : intArray) < if(x == searchedValue)< found = true; break; >> System.out.println(found);
Для found переменной изначально установлено значение false потому что единственный способ вернуть true это найти элемент и явно присвоить новое значение логическому элементу. Здесь мы просто сравниваем каждый элемент массива со значением, которое ищем, и возвращаем true если они совпадают:
Для строк и настраиваемых объектов, которые могут быть в вашем коде, вы должны использовать другой оператор сравнения. Предполагая, что вы действительно переопределили метод equals() , вы можете использовать его, чтобы проверить, равен ли объект другому, возвращая true если они:
String[] stringArray = new String[]; boolean found = false; String searchedValue = "Michael"; for(String x : stringArray) < if(x.equals(searchedValue))< found = true; break; >> System.out.println(found);
Выполнение этого кода приведет к:
Collections.binarySearch ()
Кроме того, мы можем найти конкретное значение, используя встроенный метод binarySearch() из класса Collections Проблема с двоичным поиском в том, что он требует сортировки нашего массива. Если наш массив отсортирован , хотя, binarySearch() превосходит как Arrays.asList().contains() и для петли подходов.
Если он не отсортирован, дополнительное время, необходимое для сортировки массива, может сделать этот подход менее выгодным, в зависимости от размера массива и алгоритма сортировки, используемого для его сортировки.
binarySearch() имеет много перегруженных вариантов в зависимости от используемых типов и наших собственных требований, но наиболее общий из них:
public static int binarySearch(Object[] a, Object[] key)
Где a представляет массив, и key указанное значение, которое мы ищем.
Теперь возвращаемое значение может немного сбивать с толку, поэтому лучше иметь в виду официальную документацию Oracle:
Возвращаемое значение этого метода — индекс искомого ключа, если он содержится в массиве; в противном случае (- ( точка вставки ) — 1), где точка вставки определяется как точка, в которой ключ будет вставлен в массив: индекс первого элемента больше, чем ключ, или a.length если все элементы в массив меньше указанного ключа.
Integer[] intArray = new Integer[]; String[] nameArray = new String[]; // Array is already sorted lexicographically List intList = new ArrayList<>(Arrays.asList(intArray)); List nameList = new ArrayList<>(Arrays.asList(nameArray)); System.out.println(Collections.binarySearch(intList, 2)); System.out.println(Collections.binarySearch(nameList, "Robin"));
Первый элемент находится в позиции 1 . Второй элемент не найден и будет вставлен в позицию 5 — в конец массива. Возвращаемое значение -(insertion point)-1 , поэтому возвращаемое значение оказывается -6 .
Если значение больше или равно 0 , массив содержит элемент, в противном случае он не содержит его.
Java 8 Stream API
Java 8 Stream API очень универсален и предлагает краткие решения различных задач, связанных с обработкой коллекций объектов. Для большинства задач использование Streams является естественным и интуитивно понятным.
Давайте посмотрим, как мы можем использовать Stream API, чтобы проверить, содержит ли массив целое число:
Integer[] arr = new Integer[]; System.out.println(Arrays.stream(arr).anyMatch(x -> x == 3));
И чтобы сделать это со строками или настраиваемыми объектами:
String[] arr = new String[]; String searchString = "Michael"; boolean doesContain = Arrays.stream(arr) .anyMatch(x -> x.equals(searchString)); System.out.println(doesContain);
Или вы можете сделать это короче, используя ссылку на метод:
boolean doesContain = Arrays.stream(arr) .anyMatch(searchString::equals); System.out.println(doesContain);
Apache Commons — ArrayUtils
Библиотека Apache Commons предоставляет множество новых интерфейсов, реализаций и классов, расширяющих базовую платформу Java Framework, и присутствует во многих проектах.
Класс ArrayUtils представляет множество методов для управления массивами, включая метод contains() :
Integer[] intArray = new Integer[]; String[] nameArray = new String[]; System.out.println(ArrayUtils.contains(intArray, 3)); System.out.println(ArrayUtils.contains(nameArray, "John"));
Заключение
В этой статье мы рассмотрели несколько способов проверить, содержит ли массив в Java определенный элемент или значение. Мы рассмотрели преобразование массива в список и вызов contains() с использованием цикла for, Java 8 Stream API, а также Apache Commons.
Licensed under CC BY-NC-SA 4.0
Java 8 Stream find
Stream API — новый способ взаимодействия с данными, представляя их в виде конечного потока данных.
Для поиска данных в Stream-е, необходимо использовать комбинации методов filter() и findAny() или findFirst()
2. Stream findAny
Метод findAny() возвращает первый попавшийся элемент из Stream-a, в виде обертки Optional.
Теперь найдем любую строку, в которой есть слово «Java»
Для обычных Stream-ов (последовательных) при нескольких запусках результат будет один и тот же. Для параллельных же — всегда разный
3. Stream findFirst
Метод findFirst() возвращает первый элемент по порядку из Stream-a, в виде обертки Optional.
Теперь найдем первое число, больше 10
В данном случае для обычных Stream-ов (последовательных) и для параллельных при нескольких запусках результат будет один и тот же, т.к. возвращается именно первый элемент по порядку в Stream-e.
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Детальную информацию Вы можете найти у нас на сайте.