У меня есть два ArrayList
объекта по три целых числа в каждом. Я хочу найти способ вернуть общие элементы двух списков. Кто-нибудь знает, как я могу этого добиться?
97
Используйте Collection#retainAll()
.
listA.retainAll(listB);
// listA now contains only the elements which are also contained in listB.
Если вы хотите, чтобы изменения не повлияли на него listA
, вам необходимо создать новый.
List<Integer> common = new ArrayList<Integer>(listA);
common.retainAll(listB);
// common now contains only the elements which are contained in listA and listB.
Collection#retainAll()
и в комментариях во фрагментах кода, нет, это не так. Изменения отражаются в списке, в котором вы вызываете метод.Вы можете использовать набор операций пересечения с вашими
ArrayList
объектами.Что-то вроде этого:
Теперь
l3
должны быть только общие элементы междуl1
иl2
.источник
l2
. Вы, вероятно, хотели сказатьList<Integer> l3 = new ArrayList<Integer>(l2);
вместо этого.Зачем изобретать велосипед? Используйте коллекции Commons :
источник
retainAll()
повторяющихся элементов. Так что, вероятно, один правильный, а другой неправильный, в зависимости от того, как вы подходите к проблеме.Использование
Stream.filter()
метода Java 8 в сочетании сList.contains()
:источник
источник
Выход [1, 5]
источник
Вы можете получить общие элементы между двумя списками, используя метод keepAll. Этот метод удалит все несовпадающие элементы из списка, к которому он применяется.
В этом случае из списка будут удалены все элементы, которых нет в списке list1, и останутся только те элементы, которые являются общими для list и list1.
Вывод:
ПРИМЕЧАНИЕ. После применения метода keepAll к списку список содержит общий элемент между списком и списком list1.
источник
источник
источник
рассмотрим два списка L1 и L2
Используя Java8, мы легко можем это выяснить
L1.stream().filter(L2::contains).collect(Collectors.toList())
источник
На случай, если вы захотите сделать это самостоятельно ..
источник
commons
содержит общие элементы. Второй цикл for печатает их на консоли. Я не вижу, где код считает общие элементы.Некоторые из приведенных выше ответов похожи, но не совпадают, поэтому опубликуйте их как новый ответ.
Решение:
1. Используйте HashSet для хранения элементов, которые необходимо удалить
2. Добавьте все элементы list1 в HashSet
3. Выполните итерацию list2 и удалите элементы из HashSet, которые присутствуют в list2 ==>, которые присутствуют как в list1, так и в list2
4 . Теперь переберите HashSet и удалите элементы из list1 (поскольку мы добавили все элементы list1 для установки), наконец, list1 имеет все общие элементы.
Примечание: мы можем добавить все элементы list2, и на третьей итерации мы должны удалить элементы из список2.
Сложность времени: O (n)
Сложность пространства: O (n)
Код:
вывод:
источник