Oc-windows.ru

IT Новости из мира ПК
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java arraylist поиск элемента

Найти общие элементы в двух ArrayLists в Java

Предварительное условие : ArrayList в Java

Учитывая два ArrayLists, задача состоит в том, чтобы напечатать все общие элементы в обоих ArrayLists в Java.

Примеры:

    Использование метода Collections.retainAll ()

Синтаксис:

Подходить:

  1. Получить два ArrayLists.
  2. Найдите общие элементы в обоих списках, используя метод Collection.retainAll (). Этот метод сохраняет только общие элементы обоих Collection в Collection1.
  3. Список 1 теперь содержит только общие элементы.

Ниже приведена реализация вышеуказанного подхода:
Программа: изменяя содержимое List1.

// Java-программа для поиска общих элементов
// в двух списках ArrayList
// Использование метода retainAll ()

// импортируем пакет ArrayList

public class GFG <

public static void main(String[] args)

// создаем ArrayList list1

list1 = new ArrayList ();

// Добавить значения в ArrayList

// распечатать список 1

// Создать ArrayList list2

list2 = new ArrayList ();

// Добавить значения в ArrayList

// распечатать список 2

// Найти общие элементы

// распечатать список 1

System.out.println( «Common elements: «

Программа 2: сохраняя содержимое List1.

// Java-программа для поиска общих элементов
// в двух списках ArrayList
// Использование метода retainAll ()

// импортируем пакет ArrayList

public class GFG <

public static void main(String[] args)

// создаем ArrayList list1

list1 = new ArrayList ();

// Добавить значения в ArrayList

// распечатать список 1

// Создать ArrayList list2

list2 = new ArrayList ();

// Добавить значения в ArrayList

// распечатать список 2

// Создать ArrayList list3

list3 = new ArrayList (list1);

// Сохраняем результаты сравнения

// в ArrayList list3

// распечатать список 3

System.out.println( «Common elements: «

Использование потокового фильтра

Синтаксис:

Подходить:

  1. Сначала создайте два ArrayList и добавьте значения списка.
  2. Преобразуйте ArrayList в Stream, используя метод stream ().
  3. Установите условие фильтра, чтобы быть отличным, используя метод contains ().
  4. Соберите отфильтрованные значения как List, используя метод collect (). Этот список будет возвращать общий элемент в обоих списках.
  5. Распечатать список3

Ниже приведена реализация вышеуказанного подхода:

// Java-программа для поиска общих элементов
// в двух списках ArrayList
// Использование метода потокового фильтра

// импортируем пакет ArrayList

public class GFG <

public static void main(String[] args)

// создаем ArrayList list1

list1 = new ArrayList ();

// Добавить значения в ArrayList

// распечатать список 1

// Создать ArrayList list2

list2 = new ArrayList ();

// Добавить значения в ArrayList

// распечатать список 2

// Найти общие элементы

System.out.print( «Common elements: » );

  • Наивный подход:
    1. Сначала создайте два ArrayList и добавьте значения списка.
    2. Создайте временный ArrayList для хранения общих элементов.
    3. Выполните итерацию по списку list1 и проверьте, присутствует ли этот элемент в списке list2, используя метод ArrayList.contains ().
    4. Если найден, добавьте его в список3
    5. Распечатать общие элементы из списка 3

    Ниже приведена реализация вышеуказанного подхода:

    // Java-программа для поиска общих элементов
    // в двух списках ArrayList
    // Использование метода потокового фильтра

    // импортируем пакет ArrayList

    public class GFG <

    public static void main(String[] args)

    // создаем ArrayList list1

    list1 = new ArrayList ();

    // Добавить значения в ArrayList

    // распечатать список 1

    // Создать ArrayList list2

    list2 = new ArrayList ();

    // Добавить значения в ArrayList

    // распечатать список 2

    // Создать ArrayList list3

    list3 = new ArrayList ();

    // Найти общие элементы

    // при переборе list1

    for (String temp : list1) <

    // Проверяем, является ли этот элемент

    // присутствует в list2 или нет

    // С настоящего момента добавляем его в список list3

    How to Find an Element in a List with Java

    Last modified: February 12, 2020

    I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:

    In the 9 years of running Baeldung, I’ve never, ever done a «sale».
    But. we’ve also not been through anything like this pandemic either.
    And, if making my courses more affordable for a while is going to help a company stay in business, or a developer land a new job, make rent or be able to provide for their family — then it’s well worth doing.
    Effective immediately, all Baeldung courses are 33% off their normal prices!
    You’ll find all three courses in the menu, above, or here.

    1. Overview

    Finding an element in a list is a very common task we come across as developers.

    In this quick tutorial, we’ll cover different ways we can do this with Java.

    Further reading:

    Checking If a List Is Sorted in Java

    Java List Initialization in One Line

    2. Setup

    Let’s start by defining a Customer POJO:

    Note that we’ve overridden hashCode and equals in our Customer class.

    Based on our current implementation of equals, two Customer objects with the same id will be considered equal.

    We’ll use this list of customers along the way.

    3. Using Java API

    Java itself provides several ways of finding an item in a list:

    • The contains method
    • The indexOf method
    • An ad-hoc for loop, and
    • The Stream API

    3.1. contains()

    List exposes a method called contains:

    As the name suggests, this method returns true if the list contains the specified element, and returns false otherwise.

    So when we just need to check if a specific item exists in our list, we can do:

    3.2. indexOf()

    indexOf is another useful method for finding elements:

    This method returns the index of the first occurrence of the specified element in the given list, or -1 if the list doesn’t contain the element.

    So, logically, if this method returns anything other than -1, we know that the list contains the element:

    Читать еще:  Integer compare java

    The main advantage of using this method is that it can tell us the position of the specified element in the given list.

    3.3. Basic Looping

    But what if we want to do a field-based search for an element? Say we’re announcing a lottery and we need to declare a Customer with a specific name as the winner.

    For such field-based searches, we can turn to iteration.

    A traditional way of iterating through a list is to use one of Java’s looping constructs. In each iteration, we compare the current item in the list with the element we’re looking for to see if it’s a match:

    Here, the name refers to the name we are searching for in the given list of customers. This method returns the first Customer object in the list with a matching name, and null if no such Customer exists.

    3.4. Looping With an Iterator

    Iterator is another way that we can traverse a list of items.

    We can simply take our previous example and tweak it a bit:

    And the behavior is the same as before.

    3.5. Java 8 Stream API

    As of Java 8, we can also use the Stream API to find an element in a List.

    To find an element matching specific criteria in a given list, we:

    • invoke stream() on the list
    • call the filter() method with a proper Predicate
    • call the findAny() construct which returns the first element that matches the filter predicate wrapped in an Optional if such an element exists

    For convenience, we default to null in case an Optional is empty but this might not always be the best choice for every scenario.

    4. Third-Party Libraries

    Now, while the Stream API is more than sufficient, what should we do if we’re stuck on an earlier version of Java?

    Fortunately, there are many third-party libraries like Google Guava and Apache Commons which we can use.

    4.1. Google Guava

    Google Guava provides functionality that is similar to what we can do with streams:

    As we can with Stream API, we can optionally choose to return a default value instead of null:

    The above code will pick the first element in the list if no match is found.

    And don’t forget that Guava throws a NullPointerException if either the list or the predicate is null.

    4.2. Apache Commons

    We can find an element in almost the exact same way using Apache Commons:

    There are a couple of important differences, though:

    1. Apache Commons just returns null if we pass a null list
    2. It doesn’t prov >

    In this article, we’ve learned different ways of finding an element in a List, starting with quick existence checks and finishing with field-based searches.

    We also looked at the third-party libraries Google Guava and Apache Commons as alternatives to the Java 8 Streams API.

    Thanks for stopping by, and remember to check out all the source for these examples over on GitHub.

    Списки на Java — методы интерфейса List

    Интерфейс Java List, java.util.List, представляет упорядоченную последовательность объектов. Элементы, содержащиеся в списке Java, вставлять и удалять в соответствии с порядком их появления в списке.

    Каждый элемент в списке Java имеет индекс. Первый элемент в имеет индекс 0, второй элемент имеет индекс 1 и т.д.

    Вы можете добавить любой объект в список. Если список не типизирован с использованием Java Generics, то вы можете даже смешивать объекты разных типов (классов) в одном и том же списке.

    Java List — это стандартный интерфейс, который является подтипом Java Collection, что означает, что означает, что List наследуется от Collection.

    Учебное видео по спискам Java

    Если вы предпочитаете смотреть видео вместо чтения текста, вот видео версия этого учебника по Java List:

    Java List и Set

    Java List и Java Set очень похожи в том, что они оба представляют коллекцию элементов. Тем не менее, есть некоторые существенные различия.

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

    Второе различие — элементы в List имеют порядок, и элементы могут повторяться в этом порядке. Набор не предполагает порядок элементов, хранящихся внутри.

    Реализация List

    Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в Listinterface.

    Поскольку List — это интерфейс, вам необходимо создать конкретную реализацию интерфейса, чтобы использовать его. Вы можете выбирать между следующими реализациями List в API коллекций Java:

    • java.util.ArrayList
    • java.util.LinkedList
    • java.util.Vector
    • java.util.Stack

    Также есть параллельные реализации List в пакете java.util.concurrent.

    Вот несколько примеров того, как создать экземпляр List:

    Как вставить элементы в список Java

    Вставить элементы (объекты) в список Java можно методом add (). Вот пример добавления элементов в список Java:

    Первые три вызова add () добавляют экземпляр String в конец списка.

    Вставить нулевые значения

    На самом деле возможно вставить даже нулевые значения в список.

    Добавить элементы по определенному индексу

    Можно добавить элемент в список по определенному индексу. Интерфейс List имеет версию метода add(), которая принимает индекс в качестве первого параметра, и элемент для вставки в качестве второго параметра. Вот пример вставки элемента с индексом 0.

    Если список уже содержит элементы, то теперь они будут перемещаться дальше во внутренней последовательности. Элемент, который имел индекс 0 до того, как новый элемент был вставлен в индекс 0, будет перемещен в индекс 1 и т.д.

    Вставляем все элементы из одного списка в другой

    Можно добавить все элементы из одного списка в другой. Сделаем это с помощью метода ListaddAll (). Результат представляет собой объединение двух списков.

    Этот пример добавляет все элементы из listSource в listDest.

    Метод addAll () принимает набор в качестве параметра, поэтому в качестве параметра можно передать список или набор.

    Получить элементы из списка Java

    Вы можете получить элементы из списка Java, используя индекс элементов. Методом get (int index). Вот пример доступа к элементам списка с использованием индексов элементов:

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

    Как найти элементы в списке Java

    Вы можете найти элементы в списке Java, используя один из этих двух методов:

    1. index()
    2. LastIndexOf ()Метод indexOf () находит индекс первого вхождения в списке заданного элемента.

    Запуск этого кода приведет к следующему результату:

    Найти последнее вхождение элемента в списке

    Метод lastIndexOf () находит индекс последнего вхождения в списке данного элемента.

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

    Элемент 1 встречается 2 раза. Индекс последнего равен 2.

    Проверка: содержит ли список элемент?

    Вы можете проверить, содержит ли Java List данный элемент, используя метод List contains ().

    Чтобы определить, содержит ли List этот элемент, List будет внутренне выполнять итерации своих элементов и сравнивать каждый элемент с объектом, переданным в качестве параметра.

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

    Очевидно, что если входной параметр для contains () имеет значение null, метод contains () не будет использовать метод equals() для сравнения с каждым элементом, а вместо этого использует оператор ==.

    Как удалить элементы из списка Java

    Вы можете удалить элементы из списка Java с помощью этих двух методов:

    • remove(Object element)
    • remove(int index)

    remove (Object element) удаляет элемент в списке, если он присутствует. Все последующие элементы, затем перемещаются вверх по списку. Таким образом, их индекс уменьшается на 1.

    Этот пример сначала добавляет элемент, а затем снова удаляет его.

    Метод List remove (int index) удаляет элемент по указанному индексу.

    После выполнения этого примера кода список будет содержать элементы 1 и 2 с индексами 0 и 1.

    Очистить список

    Интерфейс Java List содержит метод clear (), который удаляет все элементы из списка при вызове. Удаление всех элементов также называется очисткой.

    Как сохранить все элементы из одного списка в другом

    Метод retainAll () способен сохранять все элементы из одного списка в другом. Другими словами, метод retain () удаляет все элементы, которые не найдены в другом списке.

    Результатом является пересечение двух списков.

    Узнать количество элементов

    Вы можете получить количество элементов вызвав метод size (). Вот пример:

    Подсписок списка

    Метод subList () может создавать новый List с подмножеством элементов из исходного List.

    Метод subList () принимает 2 параметра: начальный индекс и конечный индекс. Начальный индекс — это индекс первого элемента из исходного списка для включения в подсписок.

    Конечный индекс является последним индексом подсписка, но элемент в последнем индексе не включается в подсписок. Это похоже на то, как работает метод подстроки Java String.

    После выполнения list.subList (1,3) подсписок будет содержать элементы с индексами 1 и 2.

    Помните, что исходный список содержит 4 элемента с индексами от 0 до 3. Вызов list.subList (1,3) будет включить индекс 1, но исключить индекс 3, сохраняя тем самым элементы с индексами 1 и 2.

    Преобразовать list в set

    Вы можете преобразовать список Java в набор(set), создав новый набор и добавив в него все элементы из списка. Набор удалит все дубликаты.

    Таким образом, результирующий набор будет содержать все элементы списка, но только один раз.

    Обратите внимание, что список содержит элемент String 3 два раза. Набор будет содержать эту строку только один раз. Таким образом, результирующий набор будет содержать строки: element 1 , element 2 and element 3 .

    Общие списки

    По умолчанию вы можете поместить любой объект в список, но Java позволяет ограничить типы объектов, которые вы можете вставить в список.

    Этот список теперь может содержать только экземпляры MyObject. Затем вы можете получить доступ к итерации его элементов без их приведения.

    Сортировка

    Вы можете отсортировать список с помощью метода Collections sort ().

    Если Список содержит объекты, которые реализуют интерфейс Comparable (java.lang.Comparable), тогда эти объекты можно сравнивать. В этом случае вы можете отсортировать список следующим образом:

    Класс Java String реализует интерфейс Comparable, вы можете отсортировать их в естественном порядке, используя метод Collections sort ().

    Сортировка списка с помощью Comparatorimplementation

    Если объекты не реализуют интерфейс Comparable или если вы хотите отсортировать объекты в порядке, отличном от их реализации compare (), вам необходимо использовать Comparatorimplementation (java.util.Comparator).

    Вот код сортировки:

    Обратите внимание на реализацию Comparator в приведенном выше примере. Эта реализация сравнивает только поле марки автомобилей Car. Можно создать другую реализацию Comparator, которая сравнивает номерные знаки или даже количество дверей в автомобилях.

    Возможно реализовать Comparator с использованием Java Lambda. Вот пример, который сортирует объекты List of Car с использованием трех различных реализаций интерфейса Comparator, каждая из которых сравнивает экземпляры Car по своему полю:

    Итерации

    Вы можете выполнить итерацию списка несколькими различными способами. Три наиболее распространенных способа:

    • Использование итератора
    • Использование цикла for-each
    • Использование цикла for
    • Использование API Java Stream

    Итерация списка с помощью итератора

    Первый способ итерации списка — использовать итератор Java.

    Вызывая метод iterator () интерфейса List.

    Вызов hasNext () выполняется внутри цикла while.

    Внутри цикла while вы вызываете метод Iterator next () для получения следующего элемента, на который указывает Iterator.

    Если список задан с использованием Java Generics, вы можете сохранить некоторые объекты внутри цикла while.

    Итерация списка с использованием цикла For-Each

    Второй способ итерации List — использовать цикл for.

    Цикл for выполняется один раз для каждого элемента. Внутри цикла for каждый элемент, в свою очередь, связан с переменной obj.

    Можно изменить тип переменной внутри цикла for.

    Итерация списка с помощью цикла For

    Третий способ итерации List — использовать стандартный цикл for, подобный следующему:

    Цикл for создает переменную int и инициализирует ее 0. Затем она зацикливается, пока переменная int i меньше размера списка. Для каждой итерации переменная i увеличивается.

    Внутри цикла for обращаемся к элементам List с помощью метода get (), передавая в качестве параметра переменную i.

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

    Тип локальной переменной внутри цикла for теперь String. Поскольку список обычно типизируется как String, он может содержать только объекты String.

    Следовательно, компилятор знает, что только метод String может быть возвращен из метода get (). Поэтому вам не нужно приводить элемент, возвращенный get (), в String.

    Перебор списка с использованием API Java Stream

    Четвертый способ итерации через API Java Stream. Для итерации вы должны сначала получить поток из списка. Получение потока из списка в Java выполняется путем вызова метода Liststream ().

    Как только вы получили поток из списка, вы можете выполнить итерацию потока, вызвав его метод forEach ().

    Вызов метода forEach () заставит Stream выполнить внутреннюю итерацию всех элементов потока.

    Средняя оценка / 5. Количество голосов:

    Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

    Или поделись статьей

    Видим, что вы не нашли ответ на свой вопрос.

    Структуры данных в картинках. ArrayList

    Приветствую вас, хабралюди!

    Взбрело мне в голову написать несколько статей, о том как реализованы некоторые структуры данных в Java. Надеюсь, статьи будут полезны визуалам (картинки наше всё), начинающим java-визуалам а также тем кто уже умеет писать new ArrayList(), но слабо представляет что же происходит внутри.

    Сегодня поговорим о ArrayList-ах

    ArrayList — реализует интерфейс List. Как известно, в Java массивы имеют фиксированную длину, и после того как массив создан, он не может расти или уменьшаться. ArrayList может менять свой размер во время исполнения программы, при этом не обязательно указывать размерность при создании объекта. Элементы ArrayList могут быть абсолютно любых типов в том числе и null.

    Создание объекта

    Только что созданный объект list, содержит свойства elementData и size.

    Хранилище значений elementData есть ни что иное как массив определенного типа (указанного в generic), в нашем случае String[]. Если вызывается конструктор без параметров, то по умолчанию будет создан массив из 10-ти элементов типа Object (с приведением к типу, разумеется).

    Вы можете использовать конструктор ArrayList(capacity) и указать свою начальную емкость списка.

    Добавление элементов

    Внутри метода add(value) происходят следующие вещи:

    1) проверяется, достаточно ли места в массиве для вставки нового элемента;

    2) добавляется элемент в конец (согласно значению size) массива.

    Весь метод ensureCapacity(minCapacity) рассматривать не будем, остановимся только на паре интересных мест. Если места в массиве не достаточно, новая емкость рассчитывается по формуле (oldCapacity * 3) / 2 + 1. Второй момент это копирование элементов. Оно осуществляется с помощью native метода System.arraycopy(), который написан не на Java.

    Ниже продемонстрирован цикл, поочередно добавляющий 15 элементов:

    При добавлении 11-го элемента, проверка показывает что места в массиве нет. Соответственно создается новый массив и вызывается System.arraycopy().

    После этого добавление элементов продолжается

    Добавление в «середину» списка

    Добавление элемента на позицию с определенным индексом происходит в три этапа:

    1) проверяется, достаточно ли места в массиве для вставки нового элемента;

    2) подготавливается место для нового элемента с помощью System.arraycopy();

    3) перезаписывается значение у элемента с указанным индексом.

    Как можно догадаться, в случаях, когда происходит вставка элемента по индексу и при этом в вашем массиве нет свободных мест, то вызов System.arraycopy() случится дважды: первый в ensureCapacity(), второй в самом методе add(index, value), что явно скажется на скорости всей операции добавления.

    В случаях, когда в исходный список необходимо добавить другую коллекцию, да еще и в «середину», стоит использовать метод addAll(index, Collection). И хотя, данный метод скорее всего вызовет System.arraycopy() три раза, в итоге это будет гораздо быстрее поэлементного добавления.

    Удаление элементов

    Удалять элементы можно двумя способами:
    — по индексу remove(index)
    — по значению remove(value)

    С удалением элемента по индексу всё достаточно просто

    Сначала определяется какое количество элементов надо скопировать

    затем копируем элементы используя System.arraycopy()

    уменьшаем размер массива и забываем про последний элемент

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

    Дополнение 1: Как верно заметил MikeMirzayanov, при удалении элементов текущая величина capacity не уменьшается, что может привести к своеобразным утечкам памяти. Поэтому не стоит пренебрегать методом trimToSize().

    Итоги

    — Быстрый доступ к элементам по индексу за время O(1);
    — Доступ к элементам по значению за линейное время O(n);
    — Медленный, когда вставляются и удаляются элементы из «середины» списка;
    — Позволяет хранить любые значения в том числе и null;
    — Не синхронизирован.

    Ссылки

    Пишите в комментариях пожелания/замечания и есть ли смысл продолжать.

  • Ссылка на основную публикацию
    Adblock
    detector
    ×
    ×