java - llenar - ArrayList contiene otra ArrayList
imprimir arraylist java (6)
Aquí hay otro ejemplo de uso de containsAll () que he usado para afirmar que dos matrices son iguales en la prueba JUnit:
List<String> expected = new ArrayList<String>();
expected.add("this");
expected.add("that");
expected.add("another");
List<String> actual = new ArrayListString();
actual.add("another");
actual.add("that");
actual.add("this");
Assert.assertTrue("The lists do not match!", expected.containsAll(actual));
Probablemente hay un simple delineador que no encuentro aquí, pero esta es mi pregunta:
¿Cómo verifico si una ArrayList contiene todos los objetos en otra ArrayList? Estoy buscando (si existe) para algo como:
//INCORRECT EXAMPLE:
if(one.contains(two))
{
return true;
}
else
{
return false;
}
Por ejemplo:
ArrayList one = {1, 2, 3, 4, 5}
ArrayList two = {1, 2, 3} --> True
ArrayList two = {} --> True
ArrayList two = {1, 2, 3, 4, 5} --> True
ArrayList two = {1, 5, 2} --> True
ArrayList two = {1, 7, 4} --> False
ArrayList two = {0, 1, 3} --> False
ArrayList two = {4, 5, 6} --> False
ArrayList two = {7, 8, 9} --> False
Eche un vistazo al método containsAll(Collection<?> c)
desde la interfaz de la List
. Creo que es lo que estás buscando.
Hay un método llamado containsAll
declarado en la interfaz java.util.Collection
. En su configuración one.containsAll(two)
da la respuesta deseada.
Por la interfaz de la lista:
myList.containsAll(...);
Puede usar containsAll
método de la lista para realizar el control. Sin embargo, esta es una operación lineal. Si la lista es grande, primero debe convertirla a HashSet
y luego realizar containsAll
:
HashSet tmp = new HashSet(one);
if (tmp.containsAll(two)) {
...
}
Si la longitud de one
es N
y la longitud de dos es M
, esta solución tiene una complejidad temporal de O(M+N)
; el "plano" containsAll
tiene la complejidad de O(M*N)
, que puede ser significativamente peor.
Su código en el ejemplo no tiene sentido, pero aquí hay un ejemplo de todos modos.
ArrayList<Integer> one, two;
//initialize
boolean good = true;
for (int i = 0; i < two.size(); i ++) {
if (!(one.contains(two.get(i))) {
good = false;
break;
}
}
Simplemente recorre los two
elementos y verifica si están en one
.
Entonces el good
booleano contiene el valor que desea.
Ver ArrayList#contains .
EDITAR : oh wow, me olvidé por completo de todo. Bueno, esta es una forma alternativa de hacerlo si realmente quieres entenderlo.