Я был в состоянии объединить мои 2 набора массивов, но я не могу найти разницу в наборах - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь сравнить два набора и найти их объединение / различие.Объединение работает, но разницы нет (вывод - пустой массив).

Я использовал функцию "addAll ()" для объединения, поэтому я предположил, что то же самое будет работать для "retainAll ()"функция- почему мой вывод пуст?

import java.util.Arrays;
import java.util.HashSet;

public class Main{

  public static void main(String[] args){

    Integer[] s1 = {1,5,3,6,7,8};
    Integer[] s2 = {2,5,6,9,7};

      HashSet<Integer> set1 = new HashSet<>();
      HashSet<Integer> set2 = new HashSet<>();

    //intersection between two sets

      set1.addAll(Arrays.asList(s1));
      set1.addAll(Arrays.asList(s2));

      System.out.println(set1);

      set2.retainAll(Arrays.asList(s1));
      set2.retainAll(Arrays.asList(s2));

      System.out.println(set2);
  }
}

Терминальный вывод:

javac Main.java
java Main
[1, 2, 3, 5, 6, 7, 8, 9]
[]

(обратите внимание, как второй набор пуст)

1 Ответ

0 голосов
/ 23 сентября 2019

retainAll дает вам пересечение двух Set с.Пересечение пустого Set с другим Set пусто.

Сначала нужно добавить все элементы s1 в set2, а затем вызвать retainAll с элементами s2:

set2.addAll(Arrays.asList(s1));
set2.retainAll(Arrays.asList(s2));

Это даст вам

[5, 6, 7]

Тем не менее, если вы хотите разницу двух Set s, вам нужно позвонить removeAll, а неretainAll:

set2.addAll(Arrays.asList(s1));
set2.removeAll(Arrays.asList(s2));

Это даст вам

[1, 3, 8]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...