Solución:
Primero, las operaciones que describe (excepto las inversas) son operaciones de conjunto, no operaciones de lista, así que use HashSet o (si necesita un pedido) TreeSet.
Set<Integer> a = new TreeSet<Integer>(Arrays.asList(new Integer[]{0,2,4,5,6,8,10}));
Set<Integer> b = new TreeSet<Integer>(Arrays.asList(new Integer[]{5,6,7,8,9,10}));
//union
Set<Integer> c = new TreeSet<Integer>(a);
c.addAll(b);
System.out.println(c);
//intersection
Set<Integer> d = new TreeSet<Integer>(a);
d.retainAll(b);
System.out.println(d);
//difference
Set<Integer> e = new TreeSet<Integer>(a);
e.removeAll(b);
System.out.println(e);
//reverse
List<Integer> list = new ArrayList<Integer>(a);
java.util.Collections.reverse(list);
System.out.println(list);
//Union
List<Integer> c = new ArrayList<Integer>(a.size() + b.size());
addNoDups(c,a);
addNoDups(c,b);
private void addNoDups(List<Integer> toAddTo,List<Integer> iterateOver) {
for(Integer num:iterateOver){
if(toAddTo.indexOf(num) == -1) {
toAddTo.add(num);
}
}
}
//intersection
List<Integer> c = new ArrayList<Integer> (a.size() > b.size() ?a.size():b.size());
c.addAll(a);
c.retainAll(b);
//difference a-b
List<Integer> c = new ArrayList<Integer> (a.size());
c.addAll(a);
c.removeAll(b);
Si está utilizando Conjuntos (como debería, para todos aquellos excepto los inversos son operaciones de Establecer), Guayaba proporciona estas operaciones en su Sets
clase.
Set<Integer> union = Sets.union(set1, set2);
Set<Integer> intersection = Sets.intersection(set1, set2);
Set<Integer> difference = Sets.difference(set1, set2);
Todos estos devuelven vistas no modificables, respaldadas por los Conjuntos originales.
Ver Guayaba Explicada -> Utilidades de colección -> Conjuntos
Si las listas son lo que tiene, puede convertirlas en un conjunto utilizando el constructor de copia presente en todas las colecciones estándar:
List<X> list = new ArrayList<>();
// fill up list here
Set<X> set = new HashSet<>(list);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)