Está en la página 1de 55

Estructuras de datos y algoritmos

1. Introduccin 2. Estructuras de datos lineales 3. Estructuras de datos jerrquicas 4. Grafos y caminos 5. Implementacin de listas, colas, y pilas 6. Implementacin de mapas, rboles, y grafos

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

UNIVERSIDAD DE CANTABRIA

1. Introduccin
1.1 Estructuras de datos abstractas 1.2 Eficiencia de las estructuras de datos 1.3 Interfaces y herencia mltiple 1.4 Estructuras de datos genricas 1.5 Colecciones 1.6 Iteradores 1.7 Relaciones de igualdad y orden

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

1.1 Estructuras de datos abstractas

UNIVERSIDAD DE CANTABRIA

Una estructura o tipo de datos abstracto (ADT) es una clase o mdulo de programa que contiene: datos privados, con una determinada estructura un conjunto de mtodos pblicos para manejar esos datos El conjunto de operaciones permite el uso de la estructura de datos sin conocer los detalles de su implementacin los programas que usan la clase son independientes de la forma en la que ste se implementa no es necesario conocer los detalles internos del tipo de datos ni de su implementacin

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

Encapsulamiento
Se dice que la clase encapsula el tipo de datos junto a sus operaciones, ocultando los detalles internos consiguen la reutilizacin de cdigo para muy diversas aplicaciones
Parte Pblica Objeto Operacin 1 Operacin 2 Operacin n Estado Parte Privada

UNIVERSIDAD DE CANTABRIA

Por ejemplo, las listas o colas que estudiamos el ao pasado aunque necesitamos saber la eficiencia de los mtodos
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

1.2 Eficiencia de las estructuras de datos

UNIVERSIDAD DE CANTABRIA

Entre los criterios a tener en cuenta al disear o elegir un algoritmo estn su complejidad, y su tiempo de ejecucin El tiempo de ejecucin depende de factores variados y, muy en particular, del tamao del problema El tiempo de ejecucin puede ser: exacto: es muy difcil de predecir; normalmente slo se puede saber midindolo prediccin del ritmo de crecimiento del tiempo de ejecucin con respecto al tamao del problema

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

La tirana del ritmo de crecimiento


2n n3/2 5n2

UNIVERSIDAD DE CANTABRIA

3000

100n

T(n)

2000

1000

0
1 6 11 16 21

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

26

La tirana del ritmo de crecimiento (cont.)


Funcin
100n 5n2 n3/2 2n

UNIVERSIDAD DE CANTABRIA

n=25
2.5 seg 3.12 seg 7.81 seg 33554.43 seg

n=50
5.0 seg 12.5 seg 62.5 seg 35677 aos

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

La notacin O(n)

UNIVERSIDAD DE CANTABRIA

El tiempo de ejecucin depende no slo de la cantidad de datos (n) sino tambin de cules son los datos; por ello distinguimos: tiempo de peor caso: T(n) tiempo promedio: Tavg(n) Para expresar los ritmos de crecimiento se suele usar la notacin O(n): decimos que T(n) es O(f(n)) si existen constantes c y n0 tales que T(n)cf(n) para todo nn0 La notacin O(n) muestra una cota superior al ritmo de crecimiento de un algoritmo

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

La notacin O(n) (cont.)


El tiempo en la notacin O(n) es relativo Las unidades de T(n) son inespecficas Por ejemplo, la funcin T(n) = 3n3+2n2 es O(n3). Basta hacer c=5 y no=0 para comprobarlo, 3n3+2n2 5n3

UNIVERSIDAD DE CANTABRIA

En definitiva, cuando decimos que T(n) es O(f(n)), esto significa que f(n) es el lmite de la velocidad de crecimiento de T(n)

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

La notacin (n)

UNIVERSIDAD DE CANTABRIA

Tambin se puede expresar un lmite inferior al ritmo de crecimiento de T(n) mediante la notacin (n): decimos que T(n) es (g(n)) si existe una constante c tal que T(n)c.g(n) para un nmero infinito de valores de n Por ejemplo, T(n) = n3 + 2n2 es (n3) Basta probar para c=1 y n>0. Recordar siempre que tanto O(n) como (n) son medidas relativas, no absolutas Por ejemplo, supongamos dos algoritmos cuyos tiempos de ejecucin son O(n2) y O(n3) Qu ocurre si las constantes son 100n2 y 5n3?
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

10

Clculo del tiempo de ejecucin de un programa


Regla de las sumas: si T1(n) es O(f(n)) y T2(n) es O(g(n)), entonces T1(n)+T2(n) es O(max(f(n),g(n)))

UNIVERSIDAD DE CANTABRIA

Es decir, que la suma de los tiempos de ejecucin de dos algoritmos tiene un ritmo de crecimiento igual al del mximo de los dos Por ejemplo, para tiempos polinmicos T(n)=anp+bnp-1+... entonces T(n) es O(np)

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

11

Clculo del tiempo de ejecucin de un programa (cont.)


Regla de los productos: si T1(n) es O(f(n)) y T2(n) es O(g(n)), entonces T1(n)T2(n) es O((f(n)g(n)))

UNIVERSIDAD DE CANTABRIA

Es decir, que el producto de los tiempos de ejecucin de dos algoritmos (p.e. cuando uno est anidado en el otro), tiene un ritmo de crecimiento igual al producto de los dos Por ejemplo si T(n) es O(cf(n)) entonces tambin es O(f(n)), ya que c es O(1)

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

12

Ritmos de crecimiento ms habituales


1. 2. 3. 4. O(1), o constante O(log(n)), o logartmico O(n), o lineal O(nlog(n))

UNIVERSIDAD DE CANTABRIA

5. O(n2), o cuadrtico 6. O(nx), o polinmico 7. O(2n), o exponencial

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

13

Ritmos de crecimiento ms habituales


n
128 256 512 1024 2048 4096 8192 16384 32768

UNIVERSIDAD DE CANTABRIA

1
1 1 1 1 1 1 1 1 1

log(n)
7 8 9 10 11 12 13 14 15

nlog(n)
896 2048 4608 10240 22528 49152 106496 229376 491520

n2
16384 65536 262144 1048576 4194304 16777216 67108864 268435456 1073741824

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

14

Pistas para el anlisis


Instrucciones simples (asignacin y op. aritmticas): O(1) Secuencia de instrucciones simples: O(max(1,1,1)) = O(1)

UNIVERSIDAD DE CANTABRIA

Instruccin condicional: si es un if simple y no se conoce el valor de la condicin, se supone que la parte condicional se ejecuta siempre si es un if con parte else y no se conoce el valor de la condicin, se elige la que ms tarde de las dos partes Bucle: nmero de veces, por lo que tarden sus instrucciones Procedimientos recursivos: nmero de veces que se llama a s mismo, por lo que tarda cada vez
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

15

Ejemplo de anlisis
Analizar el tiempo de ejecucin del siguiente algoritmo:
mtodo Burbuja (entero[1..n] A) es var entero temporal; fvar (1) para i desde 1 hasta n-1 hacer (2) para j desde n hasta i+1 hacer (3) si A(j-1) > A(j) entonces // intercambia A(j-1) y A(j) (4) temporal := A(j-1); (5) A(j-1) := A(j); (6) A(j) := temporal; fsi; fpara; fpara; fmtodo;

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

16

Ejemplo (cont.)

UNIVERSIDAD DE CANTABRIA

N es el n de elementos a ordenar. Vamos a analizar el programa desde el interior hacia el exterior Cada instruccin de asignacin es O(1), independiente de la dimensin de entrada
- (4), (5) y (6) son O(1) y por la regla de las sumas, la secuencia es O(max(1,1,1))=O(1)

Si suponemos el peor caso en el if, por la regla de las sumas el grupo de instrucciones (3)-(6) toma un tiempo O(1) El lazo que comienza en la lnea (2) y abarca hasta la lnea (6) tiene un cuerpo que toma un tiempo de la forma O(1) en cada iteracin, y como toma n-i iteraciones, el tiempo gastado en ese lazo es O((n-i)1) que es O(n-i).

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

17

Ejemplo (cont.)

UNIVERSIDAD DE CANTABRIA

El ltimo lazo se ejecuta n-1 veces, de forma que el tiempo total de ejecucin esta limitado superiormente por:
n1

i=1

1 n n -n ( n 1 ) = = ---- -( n i ) 2 2 2

que es O(n2)

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

18

Ejemplo de anlisis recursivo


mtodo Factorial (Entero n) retorna Entero es comienzo (1) if n <= 1 entonces (2) retorna 1; si no (3) retorna n*Factorial(n-1); fin if; fin Factorial;

UNIVERSIDAD DE CANTABRIA

La funcin se llama a s misma n veces, y cada ejecucin es O(1), luego en definitiva factorial es O(n)

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

19

1.3 Interfaces y Herencia Mltiple


En el curso pasado hablamos de la extensin de clases por herencia:
Ser Vivo

UNIVERSIDAD DE CANTABRIA

Vehiculo

Coche

Barco

Persona

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

20

Herencia mltiple
Podemos imaginar que podemos querer heredar de varias jerarquas, con herencia mltiple
Ente mvil Vehiculo
posicion()

UNIVERSIDAD DE CANTABRIA

Ser Vivo

Coche

Barco

Persona

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

21

Herencia Mltiple
La herencia mltiple sin restricciones presenta anomalas atributos del mismo nombre mtodos iguales con distinta implementacin Es fcil equivocarse se permite en C++

UNIVERSIDAD DE CANTABRIA

En Java para la herencia mltiple se usa el mecanismo conocido como Interfaz

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

22

Interfaz Java

UNIVERSIDAD DE CANTABRIA

Representa una clase abstracta de la que no se pueden crear objetos se usa slo para herencia (incluida la herencia mltiple) no tiene estado
- los atributos slo son pblicos y finales (constantes)

los mtodos son abstractos


- no tienen instrucciones, slo cabecera - estn pensados para ser redefinidos

La mejor forma de escribir en Java un ADT es con una interfaz luego la extenderemos con implementaciones concretas escritas como clases Java

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

23

Extensin de interfaces
Una clase puede extender a una sola clase implementar varias interfaces Una interfaz puede extender a otra interfaz

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

24

Especificacin de una interfaz

UNIVERSIDAD DE CANTABRIA

Es como una clase, pero usa la palabra interface los mtodos son pblicos, pero no se pone la palabra public Ejemplo

public interface EnteMovil { double posicion(); }

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

25

Implementacin de la interfaz
public class Persona extends SerVivo implements EnteMovil { public Persona(String nombre) { super(nombre); } /** Implementacin del mtodo posicion * definido en la interfaz EnteMovil */ public double posicion() { return pos; } }
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

UNIVERSIDAD DE CANTABRIA

Michael Gonzlez Harbour 23/sept/09

26

Uso de la interfaz

UNIVERSIDAD DE CANTABRIA

Uso polimrfico del mtodo posicion, para cualquier objeto de una clase que implemente la interfaz EnteMovil public static void prueba(EnteMovil e) { System.out.println ("Posicion="+e.posicion()); }

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

27

1.4 Estructuras de datos genricas

UNIVERSIDAD DE CANTABRIA

La abstraccin por genericidad se implementa en Java mediante mdulos genricos permiten hacer que un mdulo sea independiente de una determinada clase de objetos esta clase queda indeterminada ejemplo de mdulo genrico: una lista de objetos de una clase indeterminada Al crear un objeto a partir de una clase genrica es preciso indicar la clase que qued indeterminada mediante un parmetro genrico por ejemplo, podemos decir que los objetos de la lista son de la clase Alumno
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

28

Mdulos genricos (cont.)

UNIVERSIDAD DE CANTABRIA

Al usar el objeto puede usarse con objetos de la clase del parmetro genrico o de sus subclases por ejemplo, podemos almacenar en la lista, usando sus mtodos, objetos de la clase Alumno, o de sus subclases Declaracin de mdulos genricos public class Nombre <T> {...} T es el parmetro genrico

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

29

Ejemplo
/** * Almacn de un objeto cualquiera * (del tipo T indeterminado) */ public class Almacen <T> { private T contenido; private boolean hayAlgo; /**Constructor que deja el almacn vaco */ public Almacen() { hayAlgo=false; }

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

30

Ejemplo
/** Indica si el almacn tiene o no dato */ public boolean hayAlgo() { return hayAlgo; } /** Meter un dato en el almacn */ public void almacena(T dato) { contenido=dato; hayAlgo=true; }

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

31

Ejemplo
/** Sacar un dato del almacn */ public T saca() throws NoHay { if (hayAlgo) { hayAlgo=false; return contenido; } else { throw new NoHay(); } } }

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

32

Uso de un mdulo genrico

UNIVERSIDAD DE CANTABRIA

Para crear objetos a partir de una clase genrica hay que indicar cul es el parmetro genrico Almacen<Persona> alPer= new Almacen<Persona>(); Almacen<Animal> alAni= new Almacen<Animal>(); Persona p= new Persona(...); Animal a= new Animal(...); alPer.almacena(p); alAni.almacena(a); Persona sacado= alPer.saca();

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

33

1.5 Colecciones
En Java hay diversas clases genricas predefinidas para almacenar datos con diversas estructuras: Java Collections
<<interfaz>> <<interfaz>>

UNIVERSIDAD DE CANTABRIA

Collection
<<interfaz>>

List Queue

ArrayList

LinkedList

PriorityQueue

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

34

Colecciones (cont.)
<<interfaz>>

UNIVERSIDAD DE CANTABRIA

Los conjuntos son otra extensin de la interfaz Collection


Collection

<<interfaz>>

Set
<<interfaz>>

SortedSet

HashSet

TreeSet

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

35

Colecciones (cont.)
Los mapas forman una jerarqua aparte dentro de las Java Collections
<<interfaz>>

UNIVERSIDAD DE CANTABRIA

Map
<<interfaz>>

SortedMap

HashMap

TreeMap

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

36

Colecciones (cont.)
Interfaz
Collection List Queue Set SortedSet Map SortedMap

UNIVERSIDAD DE CANTABRIA

Descripcin
Coleccin de cero o ms elementos, que se pueden aadir o quitar Coleccin que admite elementos repetidos y en los que stos tienen un orden establecido Coleccin para el almacenamiento de datos intermedios, con operaciones adicionales de insercin y consulta Conjunto: no admite elementos repetidos Conjunto en el que los elementos estn en orden ascendente Contiene pares de valores {clave,valor}, para poder obtener un valor dada una clave Mapa en el que las parejas se ordenan por sus claves

Las colecciones estn en el paquete java.util


DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

37

Colecciones (cont.)
Clase
ArrayList LinkedList

UNIVERSIDAD DE CANTABRIA

Descripcin
Tabla de tamao que puede crecer. Antes se llamaba Vector Lista de tamao indefinido, con operaciones de insercin y eliminacin que son O(1). Tambin sirve para definir colas (FIFO) y pilas Cola de prioridad, donde los elementos se almacenan ordenados segn una relacin de orden establecida al crearla Conjunto implementado con tablas de troceado (hash) que habitualmente tiene tiempos de insercin, eliminacin y bsqueda que son O(1) Conjunto implementado con rbol binario con operaciones de insercin, eliminacin y bsqueda que son O(log n) Mapa con operaciones que habitualmente son O(1) Mapa con operaciones que habitualmente son O(log n)

PriorityQueue HashSet

TreeSet HashMap TreeMap

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

38

1.6 Iteradores

UNIVERSIDAD DE CANTABRIA

Un iterador definido sobre una coleccin nos permite visitar todos sus elementos uno por uno permite implementar un algoritmo de recorrido o de bsqueda El iterador se puede ver como una forma de recorrer una secuencia de elementos, disponiendo de un cursor o ndice el cursor est entre el elemento previo (el ltimo visitado) y el siguiente (el que vamos a visitar), dentro del recorrido inicialmente no hay elemento previo cuando se ha visitado el ltimo elemento, no hay siguiente

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

39

La interfaz del iterador

UNIVERSIDAD DE CANTABRIA

public interface Iterator <T> { /** * Retorna true si el iterador tiene siguiente * elemento */ public boolean hasNext(); /** * Retorna el siguiente elemento, y avanza el * cursor hacia adelante. Si no hay elemento * siguiente lanza NoSuchElementException */ public T next();

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

40

La interfaz del iterador


/** * Elimina el elemento previo de la coleccin * Lanza IllegalStateException si no hay * previo o si ya se haba borrado desde la * ultima llamada a next() */ public void remove(); }

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

41

Uso del iterador


Las colecciones Java implementan la interfaz Iterable por ella disponen del mtodo iterator() que se usa para obtener un iterador sobre la coleccin Ejemplo: LinkedList <MiClase> lista= ...; ... Iterator <MiClase> iter=lista.iterator();

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

42

Recorrido con el iterador


Para hacer un recorrido usando el iterador import java.util.*; public class Ruta { // lista de coordenadas private LinkedList<Coordenada> lista; /** * Constructor; crea la lista vaca */ public Ruta(){ lista=new LinkedList<Coordenada>(); }
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

UNIVERSIDAD DE CANTABRIA

Michael Gonzlez Harbour 23/sept/09

43

Recorrido con el iterador (cont.)


/** * Recorre la lista mostrando en pantalla * sus elementos */ public void muestra() { Iterator<Coordenada> iter= lista.iterator(); while (iter.hasNext()) { Coordenada c=iter.next(); System.out.println(c.aTexto()); } } ... }

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

44

Ejemplos

UNIVERSIDAD DE CANTABRIA

Codificar un mtodo para buscar un elemento en una coleccin y borrarlo Codificar un mtodo para borrar todos los elementos de una coleccin mostrndolos en pantalla segn se borran

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

45

El iterador de listas

UNIVERSIDAD DE CANTABRIA

La interfaz ListIterator permite iterar sobre los elementos de una lista pudiendo recorrerla hacia adelante (next()) o hacia atrs (previous()) Se obtiene con el mtodo listIterator() Ejemplo LinkedList <MiClase> lista= ...; ... ListIterator <MiClase> iter= lista.listIterator();

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

46

La instruccin for-each
El bucle for tiene un modo especial para recorrer todos los elementos de un array o de una coleccin // Coleccin de textos Collection <String> c= ...; // recorre todos los elementos de c for (String s : c) { System.out.println(s); } Este bucle, internamente, usa el iterador de la coleccin.

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

47

1.7 Relaciones de igualdad y orden


Todos los objetos java disponen del mtodo equals() para comparar dos objetos definido en la superclase Object public boolean equals(Object o)

UNIVERSIDAD DE CANTABRIA

Por omisin, este mtodo compara las referencias de los objetos podemos redefinirlo para que haga lo que necesitemos Nota: Debe redefinirse de manera consistente el mtodo de troceado hashCode(), que estudiaremos ms adelante Los objetos iguales deben tener cdigos de troceado iguales

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

48

Propiedades de la igualdad
el mtodo equals() debe ser
-

UNIVERSIDAD DE CANTABRIA

reflexivo: a.equals(a) es true conmutativo: si a.equals(b), b.equals(a) asociativo: si a.equals(b) y b.equals(c), a.equals(c) consistente (debe dar siempre el mismo valor si los datos no cambian) - si a no es null, a.equals(null) es false

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

49

Ejemplo
public class Coordenada { // atributos privados private double lat,lon; // grados /** * Redefinimos la comparacin, para * que compare los contenidos */ public boolean equals(Object o) { if (o instanceof Coordenada) { Coordenada c= (Coordenada) o; return this.lat==c.lat && this.lon==c.lon; } else { return false; } }
DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

UNIVERSIDAD DE CANTABRIA

Michael Gonzlez Harbour 23/sept/09

50

Ordenacin

UNIVERSIDAD DE CANTABRIA

Dados unos valores con dos operaciones de igualdad (==) y orden (<) una relacin de orden total es aquella que cumple para cualesquiera valores x, y, z:
o bien x==y, x<y, y<x x==x si x==y entonces y==x si x==y e y==z, entonces x==z si x<y e y<z, entonces x<z

Podemos ordenar unos valores si y solo si existe una relacin de orden total

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

51

Comparacin

UNIVERSIDAD DE CANTABRIA

La interfaz Comparable especifica una operacin de comparacin compareTo() asociada a los objetos de las clases que implementan esta interfaz x.compareTo(y) retorna un entero:
- 0 si x es igual a y - <0 si x es menor que y - >0 si y es menor x

debe imponer una relacin de orden total debe ser consistente con equals()

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

52

Ejemplo
import java.util.*; public class Alumno implements Comparable <Alumno> { private String nombre; private String dni;

UNIVERSIDAD DE CANTABRIA

public boolean equals(Object o) { if (o instanceof Alumno) { return this.dni.equals(((Alumno)o).dni); } else { return false; } }

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

53

Ejemplo (cont.)
/** * Comparacin */ public int compareTo(Alumno a) { return this.dni.compareTo(a.dni); } } Observar la asimetra: equals tiene como parmetro un Object compareTo tiene como parmetro un Alumno

UNIVERSIDAD DE CANTABRIA

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

54

Comparadores

UNIVERSIDAD DE CANTABRIA

En ocasiones es preciso definir varias relaciones de orden para valores de una clase Por ejemplo, ordenar una lista de personas por:
- DNI - apellido - fecha de nacimiento

Un objeto slo puede tener un mtodo compareTo() Pero puede tener varios Comparadores, que implementan la interfaz Comparator

DEPARTAMENTO DE MATEMTICAS, ESTADSTICA Y COMPUTACIN

Michael Gonzlez Harbour 23/sept/09

55