Upload
others
View
41
Download
0
Embed Size (px)
Citation preview
ArrayList Bucles Matrices Cuestiones Tareas
Sesion 5. TEMA 7 ESTRUCTURAS DEALMACENAMIENTO Y AGRUPACION DE
OBJETOSFundamentos de Informatica
Jose Jaime Noguera Noguera
15 de marzo de 2018
ArrayList Bucles Matrices Cuestiones Tareas
Contenidos
1 ArrayList
2 Bucles
3 Matrices
4 Cuestiones
5 Tareas
ArrayList Bucles Matrices Cuestiones Tareas
Clases de librerıa
Disponemos de una amplia coleccion de clases ya programadas quepodemos aprovechar para realizar nuestros programas. Se conocencomo clases de librerıa y vienen agrupadas en paquetes. No nece-sitamos conocer su implementacion, solo su funcionamiento. Parahacer uso de ellas utilizamos en las primeras lıneas de la clase:
Importacion de una clases de librerıaimport paquete.subpaquete.NombreClase;
Importacion de todas las clases de un subpaqueteimport paquete.subpaquete.*;
ArrayList Bucles Matrices Cuestiones Tareas
Coleccion: ArrayList
Objeto coleccionObjeto que puede almecenar un numero arbitrario de otros objetos.
ArrayList es una clase de librerıa que implementa un tipo de objetocoleccion. En particular permite agrupar objetos mediante una listasecuencial desordenada de tamano flexible.
ArrayList Bucles Matrices Cuestiones Tareas
ArrayList
Para utilizar ArrayList en nuestra clase debemos:Importacion: import java.util.ArrayList;Definicion: ArrayList<Tipo> NombreColeccion;Creacion: NombreColeccion=new ArrayList<Tipo>();
Como vemos hay que especificar el tipo de objeto que queremosagrupar en nuestra coleccion. Este tipo de clases se denominan cla-ses genericas. No se pueden almacenar tipos primitivos, siem-pre hay que usar tipos de objeto.
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplos
Definicion de un campo que contendra una coleccion deenteros:
private ArrayList<Integer> enteros;
Definicion de un campo que contendra una coleccion deobjetos tipo Coche:
private ArrayList<Coche> coches;
Definicion de una variable local que contrendra una coleccionde String.
ArrayList<String> cadenas;
ArrayList Bucles Matrices Cuestiones Tareas
Definicion+Creacion
El siguiente proceso:
private ArrayList<Double> racionales; // Definicionracionales= new ArrayList<Double>(); //Creacion
Puede expresarse en una sola linea:
private ArrayList<Double> racionales = new ArrayList<Double>();
ArrayList Bucles Matrices Cuestiones Tareas
Metodos importantes de ArrayList
add(object) Anade el objeto object a la coleccion. Lo anade alfinal de la lista.
get(index) Devuelve el objeto de la coleccion que ocupa laposicion index.
size() Devuelve el numero de elementos que tiene lacoleccion.
remove(index) Borra el elemento que ocupa la posicion index (ylos posteriores se desplazan una posicion a laizquierda). index es un entero.
ArrayList Bucles Matrices Cuestiones Tareas
Importante
NumeracionLos ındices en ArrayList empiezan desde 0.
RefenciasEn un ArrayList nunca se almacenan los objetos sino referencias aobjetos.
ArrayList de ArrayListNo hay ningun lımite en cuanto al tipo de objeto que se puedecoleccionar, de hecho se puede crear un ArrayList de ArrayList.
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo
Con el Code Pad, podemos probar algun ejemplo:
import java.util.ArrayList;ArrayList<String> nombres=new ArrayList<String>();nombres.add(”Pepe”);nombres.add(”Juan”);nombres.add(”Rosa”);nombres.add(”Maria”);
Si hacemosint a=nombres.size();
El valor de la variable a sera 4
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo
En este momento tenemos la situacion
Figura 1: Respresentacion grafica de un ArrayList.
Si queremos eliminar la cadena ”Juan”, debemos utilizarnombres.remove(1);
ArrayList Bucles Matrices Cuestiones Tareas
Bucles
Bucle forfor(int i= 0; i<=max iteraciones; i++){
cuerpo del bucle;}
int i=0 es la inicializacion. Puede empezar por cualquier otrovalor, y podemos utilizar cualquier nombre de variable.i<max iteraciones es la condicion para continuar el siguientepaso. Podemos utilizar <, <=, >, >=.i++, es la accion que se realiza despues de cada iteracion. Eneste caso se suma uno a i. Si fuese i - - se restarıa uno, sifuese i=i+2 se sumarıa 2.
ArrayList Bucles Matrices Cuestiones Tareas
Bucles
Bucle for-eachfor(TipoElemento elemento : coleccion){
cuerpo del bucle;}
Ejemplo. coches es un ArrayList que contiene objetos de la claseCoche:
for(Coche coche tmp : coches){cuerpo del bucle;
}No necesitamos gestionar el ındice y en el cuerpo del bucle podemosutilizar directamente coche tmp, que representara un objeto distintopara cada iteracion.
ArrayList Bucles Matrices Cuestiones Tareas
Bucles
Bucle whilewhile(i<=max iteraciones){
cuerpo del bucle;i++;
}
i<=max iteraciones se ha puesto como ejemplo, realmentese puede poner cualquier condicion booleana.i++, gestionamos el ındice en el interior del bucle, en casocontrario podemos entrar en un bucle infinito.El ındice i debe estar definido e inicializado antes de la lıneawhile (por ejemplo int i=0;).
ArrayList Bucles Matrices Cuestiones Tareas
Bucles
Aunque el libro lo explica en este capıtulo, nos queda explicar unultimo bucle:Bucle do-whiledo{
cuerpo del bucle;} while (expresion);
Se ejecuta siempre al menos una vez.Si expresion se cumple, se ejecuta de nuevo el bucle, si no,finaliza.
ArrayList Bucles Matrices Cuestiones Tareas
Bucles
IteratorIterator<TipoElemento> it =nombreColeccion.iterator();while(it.hasNext()) {
Cuerpo del bucle;it.next (elemento que varıa en cada iteracion);
}
Observar la nomenclatura anterior (mayusculas-minustulas)it es un nombre arbitrarioDebemos incluir import java.util.Iterator;En principio no parece tener ventajas respecto a los otros,pero es necesario para ciertos casos.
ArrayList Bucles Matrices Cuestiones Tareas
EJEMPLO
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo: creando objetos
Instanciamos la clase Bucles e introducimos varios nombres, porejemplo:Bucles bucles1 = new Bucles();bucles1.introduceNombre(”Sofıa”);bucles1.introduceNombre(”Roberto”);bucles1.introduceNombre(”Sonia”);bucles1.introduceNombre(”Noelia”);bucles1.introduceNombre(”Paco”);
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo
Bucle for
public void imprimeFor(){for(int i=0;i<nombres.size();i++){
System.out.println(nombes.get(i));}
}
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo
Bucle for-each
public void imprimeForEach(){for(String nomb_tmp : nombres){
System.out.println(nomb_tmp);}
}
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo
Bucle while
public void imprimeWhile(){int i=0;while (i<nombres.size()){
System.out.println("Posicion "+i+": "+nombres.get(i));i++;
}}
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo
Bucle do-while
public void imprimeDoWhile(){int i=0;do{
System.out.println("Posicion "+i+":"+nombres.get(i));
i++;}while (i<nombres.size());
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo
Bucle Iterator
public void imprimeIterator(){Iterator<String> it=nombres.iterator();while (it.hasNext()){
String name=it.next();System.out.println(name);
}}
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo. Eliminacion con Iterator
Imaginemos que queremos borrar todos los nombres que empiecenpor S. Deberemos seguir los pasos:
1 Un blucle de busqueda.2 Si se cumple la condicion, borrar el elemento.
Si utilizamos bucles for, al modificar el ArrayList durante la ejecucionse puede producir un error (ConcurrentModificationException). Laforma mas adecuada de hacerlo es con Iterator, ya que no produceese tipo de excepciones.
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo: eliminando nombres que empiezan por s o S
public void eliminaEmpiezaS(){Iterator<String> it = nombres.iterator();while(it.hasNext()){
String name=it.next();if(name.trim().substring(0,1).toLowerCase().equals("s")){
it.remove();}
}}
Se han utilizado los metodos de String: .trim() (elimina espacios ini-ciales en blanco); .toLowerCase() (cambia a minusculas); .equals()(compara dos cadenas y devuelve True si son iguales y False en casocontrario); .substring() (ya se explico).
ArrayList Bucles Matrices Cuestiones Tareas
Ejemplo: eliminando nombres que empiezan por s o S
Otra manera de hacer lo mismo pero mediante bucle for-each es:
public void eliminaEmpiezaS2For(){for(Iterator<String> it =
nombres.iterator();it.hasNext(); ){String name=it.next();if(name.trim().substring(0,1).toLowerCase().equals("s")){
it.remove();}
}}
ArrayList Bucles Matrices Cuestiones Tareas
¿Que bucle elegir?
No hay un bule mejor o peor, depende de lo que se quieraconseguir.Si necesitamos trabajar con ındices, for o while, ya que confor-each necesito definir el ındice.Si no se necesitan ındices y solo quiero trabajar directamentecon los elementos de la coleccion, for-each es mas comodo yelegante.Si queremos ejecutal el bucle al menos una vez, do-while.Para eliminaciones dentro de bucles utilizar Iterator.
ArrayList Bucles Matrices Cuestiones Tareas
Matrices (Arrays)
Podemos hacernos una idea de que es una matriz (array en ingles)si recordamos en concepto matematico de vector y/o matriz. Tienelas peculiaridades:
Es de tamano fijo y debemos saber dicho tamano cuandocreemos la matriz.El acceso a los elementos suele ser mas eficiente de encolecciones de tamano flexible.Pueden almacenar tanto valores de tipo primitivo comoobjetos (en este caso almacena referencias a objetos).Al crearlos se inicializan sus elementos. Por ejemplo, si sonenteros se inicializan a 0. Si son objetos se inicializan susreferencias a null.Su sintaxis proviene de otros lenguajes.Normalmente se utilizan con bucles for.
ArrayList Bucles Matrices Cuestiones Tareas
Matrices (Arrays)
Ejemplo: Matriz de 10 enteros de una dimension.
Definicion TipoDato[ ] nombre;Creacion nombre = new TipoDato[tamano];
En nuestro caso (lo ponemos en una unica lınea):int[ ] vector = int[10];Si queremos asignar un valor simplemente igualamos (serıa cono unmetodo set): vector[0]=4; vector[7]=-3;Para utilizar el valor, simplemente utilizamos el nombre y la posicion(serıa como un get): vector[1]=vector[0]+vector[7];
ArrayList Bucles Matrices Cuestiones Tareas
Matrices. Ejemplo, continuacion
Si queremos recorrer todos los elementos (para imprimirlos por ejem-plo), podemos utilizar la propiedad (no es un metodo) lenght, quenos da el tamano de la matriz:
public void imprimeVector(){for(int i=0; i<vector.length;i++ ){
System.out.println(vector[i]);}
ArrayList Bucles Matrices Cuestiones Tareas
Matrices de dos dimensiones
Ejemplo:public int[ ][ ] matriz = new int[3][4] //matriz de 3 filas y 4 columnasint[4][5]=7; // Asigno al elemento matriz4,5 el valor 7
Recorrer los elementos:
public void imprimeMatriz(){for(int i=0; i<matriz.length;i++ ){
for(int j=0; j<matriz[0].length;j++ ){System.out.println(vector[i][j]);
}}
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
¿Cual es el contenido de la variable i y j?int i=3;int j;j=i++;
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
¿Cual es el contenido de la variable i y j?int i=3;int j;j=i++;
i contiene el valor 4 y j el valor 3
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
¿Cual es el contenido de la variable i y j?int i=3;int j;j=++i;
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
¿Cual es el contenido de la variable i y j?int i=3;int j;j=++i;
Tanto i como j contienen el valor 4.
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
¿Que imprime?System.out.println(2 > 7||3 <= 4 ? ”uned” : ”denia”);
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
¿Que imprime?System.out.println(2 > 7||3 <= 4 ? ”uned” : ”denia”);
Imprime uned. Recordar que dentro del parentesis hay un operadorternario que es similar a un condicional: condicion ? accion1 : accion2Si la condicion es True se lleva a cabo la accion1, en caso contrariola otra.
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
Encuentra el error:Arraylist<Persona> personas;
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
Encuentra el error:Arraylist<Persona> personas;
ArrayList y no Arraylist.
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
Tenemos lo siguiente:ArrayList<Integer> enteros = new ArrayList<Integer>();enteros.add(4);enteros.add(-3);enteros.add(7);enteros.add(0);enteros.remove(2);int a=enteros.get(2);¿Que contiene a?
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
Tenemos lo siguiente:ArrayList<Integer> enteros = new ArrayList<Integer>();enteros.add(4);enteros.add(-3);enteros.add(7);enteros.add(0);enteros.remove(2);int a=enteros.get(2);¿Que contiene a?
Contiene el valor 0.
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
¿Que imprime?
enteros=new ArrayList<Integer>();\\enteros.add(4);enteros.add(-3);enteros.add(7);enteros.add(0);enteros.add(4);for(int i=1;i<enteros.size();i++){
if(i<=2){System.out.print(enteros.get(i));
}}
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
¿Que imprime?
enteros=new ArrayList<Integer>();\\enteros.add(4);enteros.add(-3);enteros.add(7);enteros.add(0);enteros.add(4);for(int i=1;i<enteros.size();i++){
if(i<=2){System.out.print(enteros.get(i));}
}
Imprime -37.
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
¿Verdadero o falso?Si queremos eliminar un elemento de una coleccion al recorrerla, solopodemos utilizar Iterator con el bucle While.
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
¿Verdadero o falso?Si queremos eliminar un elemento de una coleccion al recorrerla, solopodemos utilizar Iterator con el bucle While.
Falso, Iterator puede utilizarse en combinacion con un bucle for.
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
Encuentra el errorArrayList<Coche> coches=new ArrayList<Coche>();Iterator<Coche> coche =coches.Iterator();
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
Encuentra el errorArrayList<Coche> coches=new ArrayList<Coche>();Iterator<Coche> coche =coches.Iterator();
Debe ser coches.iterator() y no en mayuscula.
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
¿Que imprime esto?
for(int i=0;i<=10;i++){System.out.println("Hola");if(i==3){
breack;}
}
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
¿Que imprime esto?
for(int i=0;i<=10;i++){System.out.println("Hola");if(i==3){
breack;}
}
Imprime:HolaHolaHolaHola
ArrayList Bucles Matrices Cuestiones Tareas
Pregunta
¿Es correcto lo siguiente?int a[ ] = new int[4];
ArrayList Bucles Matrices Cuestiones Tareas
Respuesta
¿Es correcto lo siguiente?int a[ ] = new int[4];
Sı, puede utilizarse esta notacion. Produce el mismo resultado que:int[ ] a=new[4];
ArrayList Bucles Matrices Cuestiones Tareas
Tareas
Realizar el test del Tema 7: Estructuras dealmacenamiento y agrupacion de objetos enjjnoguera.wordpress.con/uned-deniaLeer los apartados 6.1-6.5-6.12-6.16 del libro y el Apendice I.Programar tus propios ejemplos sobre colecciones. Insertarelementos, borrarlos, buscar un elemento...