Codificación aprenderaprogramar.com: CU00671B
GET Y REMOVE DE ARRAYLIST. EJEMPLO CONVERSIÓN DE TIPOS.
Cuando utilizamos llamadas a métodos hemos de prestar especial atención al tipo requerido por los parámetros y al tipo devuelto (si se trata de un método tipo función). Si no lo hacemos, nuestros programas pueden dar lugar a errores o resultados incoherentes. Escribe y compila el siguiente código.
//Test conversión de tipos aprenderaprogramar.com import java.util.ArrayList; public class TestConversion { public static void main (String [] Args) { ArrayList<Integer> miListadoAL; miListadoAL = new ArrayList<Integer>(); ArrayList<Integer> tmpAL = new ArrayList<Integer>(); miListadoAL.add(44); miListadoAL.add(7); miListadoAL.add(76); miListadoAL.add(29); miListadoAL.add(17);
//Recorremos el ArrayList con un for normal quedándonos con los elementos que van a ser operados a posteriori for (int i=1; i <= miListadoAL.size(); i++) { if (miListadoAL.get(i-1) < 10) { System.out.println ("Detectado un objeto (" + i +"):"+miListadoAL.get(i-1)+ ", integer con valor menor de 10, será eliminado"); tmpAL.add(i-1);} System.out.println ("Elemento en el array list (" + i + ") : " + miListadoAL.get(i-1) ); }
for (int i=0; i < tmpAL.size(); i++) { System.out.println ("Eliminamos ítem "+ (tmpAL.get(i)+1) +": " + miListadoAL.get(tmpAL.get(i) ) ); miListadoAL.remove(tmpAL.get(i) ); }
System.out.println("Valor devuelto por size() en miListadoAL después de borrado: " + miListadoAL.size() ); int tmpInt = 0; for (Integer tmpObjeto: miListadoAL) { System.out.println ("Elemento en el array list ("+(tmpInt+1)+") : " + tmpObjeto); tmpInt++; } } //Cierre del main } //Cierre de la clase |
Analiza y trata de comprender el código pues aplicamos conceptos que hemos ido estudiando previamente. Si no comprendes algo repasa los contenidos anteriores antes de seguir leyendo. El resultado será algo similar a esto:
Elemento en el array list (1) : 44 Detectado un objeto (2) : 7, integer con valor menor de 10, será eliminado Elemento en el array list (2) : 7 Elemento en el array list (3) : 76 Elemento en el array list (4) : 29 Elemento en el array list (5) : 17 Eliminamos ítem 2: 7 Valor devuelto por size() en miListadoAL después de borrado: 5 Elemento en el array list (1) : 44 Elemento en el array list (2) : 7 Elemento en el array list (3) : 76 Elemento en el array list (4) : 29 Elemento en el array list (5) : 17 |
Obviamente nuestra intención va por un lado y los resultados obtenidos por otro. Algo no está funcionando, y sin embargo no nos salta ningún error. ¿Qué está ocurriendo? Tenemos una disfunción entre el tipo requerido por un método y el tipo que le pasamos. Si consultas la documentación de los métodos get y remove de la clase ArrayList, comprobarás que el método get devuelve un objeto (Integer) mientras que el método remove requiere un tipo primitivo (int). Nosotros le estamos pasando al método remove lo que nos devuelve el método get, es decir, un Integer. Para que el programa responda adecuadamente hemos de pasar a los métodos los tipos adecuados. Por tanto, hemos de pasar al método remove un tipo int y para ello hemos de indicar específicamente la conversión del objeto Integer a un primitivo int. Corrige el código introduciendo la conversión de tipos:
//Ejemplo aprenderaprogramar.com for (int i=0; i < tmpAL.size(); i++) { System.out.println ("Eliminamos ítem "+ (tmpAL.get(i)+1) +": " + miListadoAL.get(tmpAL.get(i) ) ); miListadoAL.remove( (int) tmpAL.get(i) ); //Introducida conversión de tipos } |
El resultado ahora obtenido sí debe ser el esperado:
Elemento en el array list (1) : 44 Detectado un objeto (2) :7, integer con valor menor de 10, será eliminado Elemento en el array list (2) : 7 Elemento en el array list (3) : 76 Elemento en el array list (4) : 29 Elemento en el array list (5) : 17 Eliminamos ítem 2: 7 Valor devuelto por size() en miListadoAL después de borrado: 4 Elemento en el array list (1) : 44 Elemento en el array list (2) : 76 Elemento en el array list (3) : 29 Elemento en el array list (4) : 17 |
Este ejemplo ilustra la importancia de realizar un correcto manejo de tipos en la programación Java.
Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.