vectores simetrica representados mostrar manejo listas intersección interseccion entre diferencia conjuntos con comparar arreglos java collections set

simetrica - manejo de conjuntos en java



Diferencia simétrica de dos conjuntos en Java (6)

Hay dos TreeSet s en mi aplicación:

set1 = {501,502,503,504} set2 = {502,503,504,505}

Quiero obtener la diferencia simétrica de estos conjuntos para que mi salida sea el conjunto:

set = {501,505}



Estás tras la diferencia simétrica . Esto se discute en el tutorial de Java .

Set<Type> symmetricDiff = new HashSet<Type>(set1); symmetricDiff.addAll(set2); // symmetricDiff now contains the union Set<Type> tmp = new HashSet<Type>(set1); tmp.retainAll(set2); // tmp now contains the intersection symmetricDiff.removeAll(tmp); // union minus intersection equals symmetric-difference



Puedes probar Sets.symmetricDifference() de Eclipse Collections .

Set<Integer> set1 = new TreeSet<>(Arrays.asList(501,502,503,504)); Set<Integer> set2 = new TreeSet<>(Arrays.asList(502,503,504,505)); Set<Integer> symmetricDifference = Sets.symmetricDifference(set1, set2); Assert.assertEquals( new TreeSet<>(Arrays.asList(501, 505)), symmetricDifference);

Nota: Soy un comendador de Eclipse Collections.


use retener todo, elimine todo y luego agregue Todo para hacer una unión de un conjunto existente.

  1. intersectionSet.retainAll (set2) // intersectionSet es una copia de set1
  2. set1.addAll (set2); // hacer una unión de set1 y set2
  3. luego elimine los duplicados set1.removeAll (intersectionSet);

Set<String> s1 = new HashSet<String>(); Set<String> s2 = new HashSet<String>(); s1.add("a"); s1.add("b"); s2.add("b"); s2.add("c"); Set<String> s3 = new HashSet<String>(s1); s1.removeAll(s2); s2.removeAll(s3); s1.addAll(s2); System.out.println(s1);

salida de s1: [a, c]