TIPO Y MÉTODO ITERATOR. ERROR JAVA.UTIL.CONCURRENT MODIFICATIONEXCEPTION. RESUMEN DE TIPOS DE BUCLES EN JAVA. (CU00667B)

Documentos relacionados
Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

ARRAYS O ARREGLOS. EJEMPLOS CON OBJETOS Y TIPOS PRIMITIVOS. CAMPO LENGTH. RESUMEN TIPOS DE COLECCIONES JAVA. (CU00669B)

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE ITERABLE DEL API DE JAVA Y MÉTODO ITERATOR. RECORRER COLECCIONES DE OBJETOS (CU00915C)

EL MÉTODO EQUALS EN JAVA. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. COMPARAR OBJETOS. EJEMPLOS. (CU00662B)

Fundamentos de Programación

INTERFACE COLLECTION DE JAVA.UTIL DEL API JAVA. EJERCICIOS Y EJEMPLOS RESUELTOS. MÉTODOS ADD, REMOVE, SIZE. STREAMS (CU00917C)

SOBREESCRIBIR MÉTODOS EN JAVA: TOSTRING, EQUALS. EJEMPLOS Y EJERCICIOS RESUELTOS. COMPARAR OBJETOS. (CU00694B)

Programación II 2do cuatrimestre 2017

AGRUPANDO OBJETOS (Parte-I)

LA CLASE ARRAYLIST DEL API DE JAVA. MÉTODOS ADD, SIZE, ETC. CONCEPTO DE CLASE GENÉRICA O PARAMETRIZADA (CU00665B)

INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Estructuras de Datos Clase 7 Listas e Iteradores (segunda parte)

Sesión 5. TEMA 7 ESTRUCTURAS DE ALMACENAMIENTO Y AGRUPACIÓN DE OBJETOS

ArrayList en Java. Los principales métodos para trabajar con los ArrayList son los siguientes:

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

CLASE ARRAYS DEL API JAVA. MÉTODOS PARA ARRAYS EQUALS (COMPARAR), COPYOF (COPIAR), FILL (RELLENAR). EJEMPLOS. (CU00676B)

AGRUPA P R OBJET E OS 1

PARA QUÉ SIRVEN LAS INTERFACES JAVA. IMPLEMENTAR UNA INTERFAZ DEL API. VENTAJAS. EJEMPLOS BÁSICOS. (CU00697B)

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

LA PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. SOBRECARGA DE NOMBRES. EJEMPLOS (CU00654B)

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)

ASIGNACIÓN DE IGUALDAD EN JAVA. REFERENCIAS A OBJETOS. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. (CU00663B)

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

Estructura de datos y Programación

EJEMPLO EJERCICIO RESUELTO CON POLIMORFISMO, SOBREESCRITURA DE MÉTODOS Y HERENCIA JAVA. CÓDIGO (CU00691B)

Patrones de Diseño. Patrón de comportamiento Iterator. Técnicas de Programación - Curso 2007/08

Ejercicio 1 (proyecto prlistas, paquete listas)

Soluciones. boolean pruebaiteraseriegeometrica () { Serie s= new SerieGeometrica (1, 2); return (s.iterator() instanceof IteraSerieGeometrica); }

IMPORTAR Y USAR CLASES DEL API DE JAVA. EJEMPLO CLASE MATH Y MÉTODO POW. CONSTRUCTORES PRIVADOS. (CU00647B)

5. Sentencias selectivas o condicionales

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

CLASES QUE UTILIZAN OBJETOS. RELACIÓN DE USO ENTRE CLASES JAVA. CONCEPTO DE DIAGRAMA DE CLASES. (CU00641B)

Colecciones. Nadjet Bouayad-Agha Programación 2007

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

CONCEPTO Y DEFINICIÓN DE CLASE EN JAVA. OBJETOS DEL MUNDO REAL Y ABSTRACTOS. EJEMPLOS. EJERCICIO (CU00644B)

PARTE TEÓRICA - TEST [2,5 PUNTOS]:

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Instrucción de selección múltiple switch.

Curso de Java Introducción a la Programación I

Tema 3. Estructuras de control

c) Explicar qué es un BreakPoint en Netbeans y para qué sirve. 0,5 punto

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

INTERFACE LIST. CLASE LINKEDLIST DEL API JAVA. EJERCICIO RESUELTO Y DIFERENCIAS ENTRE ARRAYLIST Y LINKEDLIST (CU00921C)

Sentencias de control de flujo

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

CONDICIONALES SWITCH CASE DEFAULT BREAK EN C. ELEGIR ENTRE VARIAS OPCIONES. EJEMPLO. (CU00532F)

Uso de Java Generics (I)

Ejercicios resueltos

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

CÓMO CREAR CONSTRUCTORES E INICIALIZAR OBJETOS EN JAVA. EJERCICIO EJEMPLO RESUELTO. (CU00639B)

LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C)

Bloque II. Elementos del lenguaje de programación Java

Tema 4 Colecciones en Java. Programación Orientada a Objetos Curso 2013/2014

PYTHON. Programación estructurada

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño variable y uso de ciclos en otros contextos

Tipos de Datos de python (2ª parte):

Dobles: Es el caso de la instrucción if-else (punto 1.2).

Introducción a Generics y Collections

Programación orientada a objetos (I)

FUNCIÓN COUNT. RECORRIDO DE ARRAYS UNIDIMENSIONALES Y MULTIDIMENSIONALES EN PHP CON FOR Y FOR-EACH. EJEMPLOS. (CU00826B)

ESTRUCTURAS DE CONTROL

1. (1 punto) Dado el siguiente fragmento en Java:

PRINCIPIOS DE PROGRAMACIÓN. Mtro. en Ingeniería de Software. Especialidad en e-commerce Ismael Jiménez Hernández

Estructuras de control selectivas

7. Otras sentencias Sentencia break. 84 A. García-Beltrán y J.M. Arranz

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

GENERAR NÚMEROS ALEATORIOS EN JAVA. CLASE RANDOM Y MÉTODO NEXTINT. EJERCICIO EJEMPLO RESUELTO. (CU00672B)

Examen Teórico Convocatoria de Junio de 2012

Bloque II. Elementos del lenguaje de programación Java

BREAK: FORZAR SALIDA BUCLES FOR, WHILE, DO EN C. LOOP. STATEMENT NOT WITHIN LOOP OR SWITCH (CU00545F)

CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B)

Programación Orientada a Objetos

Tipos abstractos de datos (TAD)

6. Sentencias repetitivas o bucles

PROGRAMACIÓN GENÉRICA

Estructuras de control: Las variables: Fuertemente tipado: Tipado dinámico: Variables booleanas: Qué son las estructuras de control?

Transcripción:

APRENDERAPROGRAMAR.COM TIPO Y MÉTODO ITERATOR. ERROR JAVA.UTIL.CONCURRENT MODIFICATIONEXCEPTION. RESUMEN DE TIPOS DE BUCLES EN JAVA. (CU00667B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha revisión: 2029 Resumen: Entrega nº67 curso Aprender programación Java desde cero. Autor: Alex Rodríguez

TIPO ITERATOR Y MÉTODO ITERATOR EN JAVA El uso del bucle for-each tiene algunos inconvenientes. Uno de ellos, que para recorrer la colección nos basamos en la propia colección y por tanto no podemos (o al menos no debemos) manipularla durante su recorrido. Supongamos que vamos recorriendo una lista de 20 objetos y que durante el recorrido borramos 5 de ellos. Probablemente nos saltará un error porque Java no sabrá qué hacer ante esta modificación concurrente. Sería como seguir un camino marcado sobre unas baldosas y que durante el camino nos movieran las baldosas de sitio: no podríamos seguir el camino previsto. Este tipo de problemas se suelen presentar con un mensaje de error del tipo java.util.concurrentmodificationexception. El uso de operaciones sobre colecciones usando un for tradicional también puede dar lugar a resultados no deseados. En general, operar sobre una colección al mismo tiempo que la recorremos puede ser problemático. Este problema queda salvado mediante un recurso del API de Java: los objetos tipo Iterator. Un objeto de tipo Iterator funciona a modo de copia para recorrer una colección, es decir, el recorrido no se basa en la colección real sino en una copia. De este modo, al mismo tiempo que hacemos el recorrido (sustentado en la copia) podemos manipular la colección real, añadiendo, eliminando o modificando elementos de la misma. Para poder usar objetos de tipo Iterator hemos de declarar en cabecera import java.util.iterator;. La sintaxis es la siguiente: Iterator <TipoARecorrer> it = nombredelacolección.iterator (); Esta sintaxis resulta un tanto confusa. Por ello vamos a tratar de analizarla con detenimiento. En primer lugar, declaramos un objeto de tipo Iterator. La sentencia para ello es Iterator <TipoARecorrer> it; donde it es el nombre del objeto que estamos declarando. El siguiente paso es inicializar la variable para que efectivamente pase a contener un objeto. Pero Iterator carece de constructor, así que no podemos usar una sentencia de tipo new Iterator<TipoARecorrer>(); porque no resulta válida. Iterator es una construcción un tanto especial. De momento nos quedamos con la idea de que es algo parecido a una clase. Dado que no disponemos de constructor, usamos un método del que disponen todas las colecciones denominado iterator() y que cuando es invocado devuelve un objeto de tipo Iterator con una copia de la colección. Por tanto hemos de distinguir: a) Iterator con mayúsculas, que define un tipo. b) El método iterator (con minúsculas) que está disponible para todas las colecciones y que cuando es invocado devuelve un objeto de tipo Iterator con una copia de la colección. Cómo sabemos cuándo nos referimos al tipo Iterator y cuándo al método iterator()? Prestando atención a las mayúsculas/minúsculas y al contexto de uso. Si el nombre de una colección va seguido de.iterator() sabremos que estamos utilizando un método para obtener el iterador de la colección. Por las

minúsculas, por los paréntesis, y por ir a continuación del nombre de la colección. Iterator es un tipo genérico o parametrizado, porque requiere que definamos un tipo complementario cuando declaramos objetos de tipo Iterator. Los objetos de tipo Iterator tienen como métodos: hasnext(): devuelve true si el objeto no es el último de la colección (the object has next). next(): hace que el objeto pase a referenciar al siguiente elemento de la lista. remove(): elimina de la colección que se está recorriendo el último objeto devuelto por next(). Uno de los métodos disponibles para la clase String es contains. La sintaxis para su uso es Cadena.contains ( textoabuscar ), que devuelve true si Cadena contiene textoabuscar. Consideremos el siguiente ejemplo: //Ejemplo aprenderaprogramar.com if (coleccion.next().contains(cadena) ) { System.out.println ( Cadena encontrada en + coleccion.next() ); } Este código presenta un problema. Cuál es? Que con la primera referencia a coleccion.next() se evalúa si un ítem de la colección contiene la variable cadena, y cuando le decimos que imprima que se ha encontrado la cadena en coleccion.next() no nos devuelve el ítem deseado. Por qué? Porque cada vez que aparezca el método next() se devuelve el siguiente objeto dentro de la colección. Por eso, en el siguiente ejemplo, donde queremos evaluar y mostrar el String que se analiza, utilizamos otro String temporal para almacenar el que nos devuelve cada llamada al método next(). Escribe y compila este código: import java.util.iterator; import java.util.arraylist; public class TestUsoIterator { //Ejemplo uso iterator aprenderaprogramar.com public static void main (String [ ] Args) { ArrayList <String> listadenombres = new ArrayList <String> (); listadenombres.add("juan Pérez Sánchez"); listadenombres.add("josé Alberto Reverón Montes"); String cadenabuscar = "Alberto"; System.out.println ("La cadena que buscamos es " + cadenabuscar); Iterator<String> it = listadenombres.iterator(); //Creamos el objeto it de tipo Iterator con String String tmpanalizando; while ( it.hasnext() ) { //Utilizamos el método hasnext de los objetos tipo Iterator tmpanalizando = it.next(); //Utilizamos el método next de los objetos tipo Iterator System.out.println ("Analizando elemento... " + tmpanalizando); if (tmpanalizando.contains(cadenabuscar) ) { System.out.println ("Cadena encontrada!!!"); } else { } //else vacío. No hay acciones a ejecutar. } //Cierre del while } //Cierre del main } //Cierre de la clase

Además de las ventajas propias de trabajar con una copia en vez de con la colección original, otro aspecto de interés de la clase Iterator y el método iterator radica en que no todas las colecciones de objetos en Java tienen un índice entero asociado a cada objeto, y por tanto no se pueden recorrer basándonos en un índice. En cambio, siempre se podrán recorrer usando un iterador. EJERCICIO Crea una clase denominada ListaCantantesFamosos que disponga de un atributo ArrayList listacantantesfamosos que contenga objetos de tipo CantanteFamoso. La clase debe tener un método que permita añadir objetos de tipo CantanteFamoso a la lista. Un objeto de tipo CantanteFamoso tendrá como atributos nombre (String) y discoconmasventas (String), y los métodos para obtener y establecer los atributos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y añade manualmente dos objetos de tipo CantanteFamoso a la la lista. Usando iterator muestra los nombres de cada cantante y su disco con más ventas por pantalla. Se debe pedir al usuario un nombre y disco con más ventas de otro cantante famoso, y una vez introducidos los datos mostrar la lista actualizada usando iterator. Una vez mostrada la lista actualizada, se debe dar opción a elegir entre volver a introducir los datos de otro cantante o salir del programa (se podrán introducir tantos datos de cantantes como se desee. Para ello usa un bucle while que dé opción a elegir al usuario). Puedes comprobar si tu código es correcto consultando en los foros aprenderaprogramar.com. Ejemplo de lo que podría ser la ejecución del programa: La lista inicial contiene los siguientes datos: Por favor introduzca los datos de otro cantante. Nombre: Michael Jackson Disco con más ventas: Thriller La lista actualizada contiene los siguientes datos: Cantante: Michael Jackson Disco con más ventas: Thriller. Desea introducir los datos de otro cantante (s/n)? s Por favor introduzca los datos de otro cantante. Nombre: Luis Miguel Disco con más ventas: Mi jardín oculto La lista actualizada contiene los siguientes datos: Cantante: Michael Jackson Disco con más ventas: Thriller. Cantante: Luis Miguel Disco con más ventas: Mi jardín oculto. Desea introducir los datos de otro cantante (s/n)? n

TIPOS DE BUCLES O CICLOS EN JAVA (RESUMEN) Hasta ahora hemos visto distintas maneras de recorrer una colección o recorrer un bucle. El siguiente esquema es un resumen de ello. For tradicional: bucle con número de iteraciones preestablecido, con contador. While: bucle con entre 0 y n iteraciones, que finaliza en base al cumplimiento de una condición. RESUMEN TIPOS DE CICLOS Do While: bucle con entre 1 y n iteraciones, que finaliza en base al cumplimiento de una condición. For extendido: recorrido de todos los items de una colección, sin contador y usando la propia colección. Iterador combinado con while: recorrido de todos los items de una colección, sin contador y usando una copia de la colección. Finalización forzada bucles: break; Próxima entrega: CU00668B Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente: http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&itemid=188