implementations java collections set

implementations - set java 8



Operaciones de conjuntos clásicos para java.util.Collection (4)

¿Hay alguna funcionalidad incorporada para las operaciones de conjunto clásico en la clase java.util.Collection? Mi implementación específica sería para ArrayList, pero esto parece algo que debería aplicarse a todas las subclases de Collection. Estoy buscando algo como:

ArrayList<Integer> setA ... ArrayList<Integer> setB ... ArrayList<Integer> setAintersectionB = setA.intersection(setB); ArrayList<Integer> setAminusB = setA.subtract(setB);

Después de algunas búsquedas, solo pude encontrar soluciones locales. Además, me doy cuenta de que puedo estar confundiendo la idea de un "Conjunto" con la idea de una "Colección", no permitiendo y permitiendo duplicados, respectivamente. Tal vez esto es realmente solo una funcionalidad para la interfaz Set?

En el caso de que nadie sepa de ninguna funcionalidad incorporada, ¿quizás podríamos usar esto como un repositorio para el código de operación de conjunto de Java de práctica estándar? Me imagino que esta rueda ha sido reinventada en numerosas ocasiones.


¿Está buscando la interfaz java.util.Set (y sus implementaciones HashSet y TreeSet (ordenadas))?
La interfaz define removeAll (Collection c) que se parece a substract () y retainAll (Collection c) que se parece a la intersección.


La intersección se realiza con Collection.retainAll ; resta con Collection.removeAll ; unión con Collection.addAll . En cada caso, como Set actuará como un conjunto y una List actuará como una lista.

Como objetos mutables, operan en su lugar. Tendrá que copiar explícitamente si desea retener el objeto mutable original sin cambiar.


Para las operaciones mutables, vea la respuesta aceptada.

Para una variante imparable, puedes hacer esto con java 8

sustracción

set1 .stream() .filter(item-> !set2.contains(item)) .collect(Collectors.toSet())

intersección

set1 .stream() .filter(item-> set2.contains(item)) .collect(Collectors.toSet())


Recomendaría Google Guava . La clase Sets parece tener exactamente lo que estás buscando. Tiene un método de intersection y un método de difference .

Esta presentación es probablemente algo que desea ver si está interesado. Se refiere a Google Collections, que era el nombre original de Guava.