Как написать уникальное значение, которое есть в 2 списках на Java

#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)
 

Если списки будут отсортированы, это будет лучшим решением.