Pues aquí está el truco.
Tomemos dos ejemplos aquí:
public class ArrayListExample {
public static void main(String[] args) {
Collection<Integer> collection = new ArrayList<>();
List<Integer> arrayList = new ArrayList<>();
collection.add(1);
collection.add(2);
collection.add(3);
collection.add(null);
collection.add(4);
collection.add(null);
System.out.println("Collection" + collection);
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(null);
arrayList.add(4);
arrayList.add(null);
System.out.println("ArrayList" + arrayList);
collection.remove(3);
arrayList.remove(3);
System.out.println("");
System.out.println("After Removal of '3' :");
System.out.println("Collection" + collection);
System.out.println("ArrayList" + arrayList);
collection.remove(null);
arrayList.remove(null);
System.out.println("");
System.out.println("After Removal of 'null': ");
System.out.println("Collection" + collection);
System.out.println("ArrayList" + arrayList);
}
}
Ahora echemos un vistazo a la salida:
Collection[1, 2, 3, null, 4, null]
ArrayList[1, 2, 3, null, 4, null]
After Removal of '3' :
Collection[1, 2, null, 4, null]
ArrayList[1, 2, 3, 4, null]
After Removal of 'null':
Collection[1, 2, 4, null]
ArrayList[1, 2, 3, 4]
Ahora analicemos el resultado:
Cuando se elimina 3 de la colección, llama al remove()
método de la colección que toma Object o
como parámetro. Por lo tanto, elimina el objeto 3
. Pero en el objeto arrayList está anulado por el índice 3 y, por lo tanto, se elimina el cuarto elemento.
Por la misma lógica de eliminación de objetos, se elimina nulo en ambos casos en la segunda salida.
Entonces, para eliminar el número 3
que es un objeto, explícitamente tendremos que pasar 3 como an object
.
Y eso se puede hacer fundiendo o ajustando usando la clase wrapper Integer
.
P.ej:
Integer removeIndex = Integer.valueOf("3");
collection.remove(removeIndex);