#java #arraylist #unique #display
Вопрос:
List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
List<Integer> list2 = new ArrayList<Integer>();
list2.add(1);
list2.add(2);
list2.add(3);
list2.add(4);
list2.add(5);
В приведенном выше коде я должен сравнить и записать уникальное значение, которое присутствует в списке2.
Здесь я должен получить результат в виде 5 bcz, который уникален, так как его нет в списке1.
Комментарии:
1. Что вы пробовали до сих пор?
Ответ №1:
Если вы просто хотите найти все, что есть только в списке 2:
List<Integer> uniqueItems = new ArrayList<>();
for (int item : list2) {
if (!list1.contains(item)) {
uniqueItems.add(item);
}
}
System.out.println(uniqueItems);
Комментарии:
1. Спасибо всем, кто ответил. На данный момент я иду с @David Wright ans. Спасибо, приятель.
Ответ №2:
Чтобы решить эту проблему, создайте копию List2. Допустим, это разные вещи. А затем удалите эти дубликаты, используя метод removeAll.
List<Integer> diffList = new ArrayList<Integer>(list2);//create Copy of list2
diffList.removeAll(list1);//remove duplicates using list1
for(int aa : diffList)
System.out.println(aa);
Ответ №3:
Если в списке 2 есть только одно дополнительное значение, это известная проблема:
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(3);
list1.add(2);
list1.add(4);
list1.add(2);
List<Integer> list2 = new ArrayList<>();
list2.add(1);
list2.add(2);
list1.add(2);
list2.add(3);
list2.add(4);
list2.add(5);
int vr = 0;
for (Integer v: list1) {
vr ^= v;
}
for (Integer v: list2) {
vr ^= v;
}
System.out.println("The result is: " vr);
В противном случае набор вместо списка был бы более подходящим (если все элементы разные).
Существует одно простое решение (для списка дорогостоящих) с использованием:
list2.removeAll(list1)
Если списки будут отсортированы, это будет лучшим решением.