Pregunta

Es decir, si tuviera dos o más conjuntos, y quería devolver un nuevo conjunto que contiene o bien:

  1. Todos los elementos de cada conjunto tiene en común (y).
  2. todos los elementos total de cada conjunto (OR).
  3. Todos los elementos únicos para cada conjunto. (XOR).

¿Hay una manera fácil, preexistente a hacer eso?

Editar:? Esa es la terminología mal, ¿verdad?

¿Fue útil?

Solución

Suponiendo 2 fijar objetos a y b

Y (intersección de dos conjuntos)

a.retainAll(b); 

O (unión de dos conjuntos)

a.addAll(b);

XOR ya sea rodar su propio bucle:

foreach item
if(a.contains(item) and !b.contains(item) ||  (!a.contains(item) and b.contains(item)))
 c.add(item)

o hacer esto:

c.addAll(a); 
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a); 

Vea la conjunto de documentación y esto página . Para obtener más.

Otros consejos

Puede utilizar el Google-Sets Colecciones clase que tiene la intersección métodos () Unión () y diferencia simétrica ().

Sets.intersection(set1, set2);
Sets.union(set1, set2);

SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());

@Milhous dijo:

  

echa un vistazo a la API de conjuntos. si utiliza   addAll puede obtener o. Si utiliza   retainAll se puede obtener la y. yo no   saber sobre el Xor.

Parece que si hubiera conjuntos s1 y s2 que podría hacer esto para conseguir XOR:

  1. copiar el conjunto s1 a s3
  2. s1.removeAll(s2); (S1 ahora contiene todos los elementos no en s2)
  3. s2.removeAll(s3); (S2 ahora contiene todos los elementos no en s3 = la antigua s1)
  4. s1.addAll(s2); (S1 contiene ahora la unión de los dos conjuntos anteriores)

echa un vistazo a los conjuntos api . si utiliza addAll puede obtener o. Si utiliza retainAll se puede obtener la y. No sé sobre el Xor.

Editar:. de la documentación de conjunto

... Si la colección especificada es también un conjunto, la operación addAll efectivamente modifica este conjunto de manera que su valor es la unión de los dos conjuntos.

.... Si la colección especificada es también un conjunto, esta operación efectivamente modifica este conjunto de manera que su valor es la intersección de los dos conjuntos.

Estoy bastante seguro de que Yakarta comunes Colecciones API es compatible con las uniones, intersecciones, etc.

Me sorprendería si la API de Google Colecciones hizo no tan bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top