SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 1
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Estructuras de datos y algoritmos
1. Introducción
2. Estructuras de datos lineales
3. Estructuras de datos jerárquicas
4. Grafos y caminos
5. Implementación de listas, colas, y pilas
6. Implementación de mapas, árboles, y grafos
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 2
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
1. Introducción
• 1.1 Estructuras de datos abstractas
• 1.2 Eficiencia de las estructuras de datos
• 1.3 Interfaces y herencia múltiple
• 1.4 Estructuras de datos genéricas
• 1.5 Colecciones
• 1.6 Iteradores
• 1.7 Relaciones de igualdad y orden
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 3
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
1.1 Estructuras de datos abstractas
Una estructura o tipo de datos abstracto (ADT) es una clase o
módulo de programa que contiene:
• datos privados, con una determinada estructura
• un conjunto de métodos públicos para manejar esos datos
El conjunto de operaciones permite el uso de la estructura de
datos sin conocer los detalles de su implementación
• 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 implementación
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 4
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Encapsulamiento
Se dice que la clase encapsula el tipo de datos junto a sus
operaciones, ocultando los detalles internos
• consiguen la reutilización de código
• para muy diversas aplicaciones
Por ejemplo, las listas o colas que estudiamos el año pasado
• aunque necesitamos saber la eficiencia de los métodos
Operación 1
Operación 2
Operación n
Estado
Objeto
Parte
Pública Parte
Privada
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 5
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
1.2 Eficiencia de las estructuras de
datos
Entre los criterios a tener en cuenta al diseñar o elegir un algoritmo
están su complejidad, y su tiempo de ejecución
El tiempo de ejecución depende de factores variados y, muy en
particular, del tamaño del problema
El tiempo de ejecución puede ser:
• exacto: es muy difícil de predecir; normalmente sólo se puede
saber midiéndolo
• predicción del ritmo de crecimiento del tiempo de ejecución con
respecto al tamaño del problema
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 6
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
La “tiranía” del ritmo de crecimiento
0
1000
2000
3000
1
6
11
16
21
26
n
T(n)
2n
n3
/2
5n2
100n
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 7
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
La “tiranía” del ritmo de crecimiento
(cont.)
Función n=25 n=50
100n 2.5 seg 5.0 seg
5n2 3.12 seg 12.5 seg
n3/2 7.81 seg 62.5 seg
2n 33554.43 seg 35677 años
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 8
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
La notación O(n)
El tiempo de ejecución depende no sólo de la cantidad de datos (n)
sino también de cuáles 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 notación
O(n):
• decimos que T(n) es O(f(n)) si existen constantes c y n0 tales que
T(n)≤c⋅f(n) para todo n≥n0
La notación O(n) muestra una cota superior al ritmo de crecimiento
de un algoritmo
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 9
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
La notación O(n) (cont.)
El tiempo en la notación O(n) es relativo
• Las unidades de T(n) son inespecíficas
Por ejemplo, la función T(n) = 3n3
+2n2
es O(n3
).
• Basta hacer c=5 y no=0 para comprobarlo,
3n3
+2n2
≤ 5n3
En definitiva, cuando decimos que T(n) es O(f(n)), esto significa
que f(n) es el límite de la velocidad de crecimiento de T(n)
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 10
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
La notación Ω(n)
También se puede expresar un límite inferior al ritmo de
crecimiento de T(n) mediante la notación Ω(n):
• decimos que T(n) es Ω(g(n)) si existe una constante c tal que
T(n)≥c.g(n) para un número 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
ejecución son O(n2
) y O(n3
)
• ¿Qué ocurre si las constantes son 100n2
y 5n3?
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 11
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Cálculo del tiempo de ejecución 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)))
Es decir, que la suma de los tiempos de ejecución de dos
algoritmos tiene un ritmo de crecimiento igual al del máximo de los
dos
Por ejemplo, para tiempos polinómicos T(n)=anp
+bnp-1
+...
• entonces T(n) es O(np)
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 12
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Cálculo del tiempo de ejecución 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)))
Es decir, que el producto de los tiempos de ejecución 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(c⋅f(n)) entonces también es O(f(n)), ya que
c es O(1)
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 13
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ritmos de crecimiento más habituales
1. O(1), o constante
2. O(log(n)), o logarítmico
3. O(n), o lineal
4. O(n⋅log(n))
5. O(n2), o cuadrático
6. O(nx
), o polinómico
7. O(2n
), o exponencial
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 14
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
.Ritmos de crecimiento más habituales
n 1 log(n) n⋅log(n) n2
128 1 7 896 16384
256 1 8 2048 65536
512 1 9 4608 262144
1024 1 10 10240 1048576
2048 1 11 22528 4194304
4096 1 12 49152 16777216
8192 1 13 106496 67108864
16384 1 14 229376 268435456
32768 1 15 491520 1073741824
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 15
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Pistas para el análisis
Instrucciones simples (asignación y op. aritméticas): O(1)
Secuencia de instrucciones simples: O(max(1,1,1)) = O(1)
Instrucción condicional:
• si es un “if” simple y no se conoce el valor de la condición, se
supone que la parte condicional se ejecuta siempre
• si es un “if” con parte “else” y no se conoce el valor de la
condición, se elige la que más tarde de las dos partes
Bucle: número de veces, por lo que tarden sus instrucciones
Procedimientos recursivos: número de veces que se llama a sí
mismo, por lo que tarda cada vez
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 16
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo de análisis
Analizar el tiempo de ejecución del siguiente algoritmo:
método 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;
fmétodo;
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 17
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo (cont.)
N es el nº de elementos a ordenar. Vamos a analizar el programa
desde el interior hacia el exterior
• Cada instrucción de asignación es O(1), independiente de la
dimensión 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 línea (2) y abarca hasta la línea (6)
tiene un cuerpo que toma un tiempo de la forma O(1) en cada
iteración, y como toma n-i iteraciones, el tiempo gastado en ese
lazo es O((n-i)⋅1) que es O(n-i).
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 18
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo (cont.)
• El último lazo se ejecuta n-1 veces, de forma que el tiempo total
de ejecución esta limitado superiormente por:
• que es O(n2
)
n i–( )
i 1=
n 1–
∑
1
2
---n n 1–( )
n
2
2
-----
n
2
---–= =
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 19
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo de análisis recursivo
método 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;
La función se llama a sí misma n veces, y cada ejecución es O(1),
luego en definitiva factorial es O(n)
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 20
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
1.3 Interfaces y Herencia Múltiple
En el curso pasado hablamos de la extensión de clases por
herencia:
Vehiculo
Coche Barco Persona
Ser Vivo
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 21
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Herencia múltiple
Podemos imaginar que podemos querer heredar de varias
jerarquías, con herencia múltiple
Vehiculo
Coche Barco Persona
Ser Vivo
Ente móvil
posicion()
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 22
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Herencia Múltiple
La herencia múltiple sin restricciones presenta anomalías
• atributos del mismo nombre
• métodos iguales con distinta implementación
Es fácil equivocarse
• se permite en C++
En Java para la herencia múltiple se usa el mecanismo conocido
como Interfaz
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 23
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Interfaz Java
Representa una clase abstracta de la que no se pueden crear
objetos
• se usa sólo para herencia (incluida la herencia múltiple)
• no tiene estado
- los atributos sólo son públicos y finales (constantes)
• los métodos son abstractos
- no tienen instrucciones, sólo cabecera
- están 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 MATEMÁTICAS, © Michael González Harbour 24
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Extensión de interfaces
Una clase puede
• extender a una sola clase
• implementar varias interfaces
Una interfaz puede
• extender a otra interfaz
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 25
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Especificación de una interfaz
Es como una clase, pero usa la palabra interface
• los métodos son públicos, pero no se pone la palabra public
Ejemplo
public interface EnteMovil
{
double posicion();
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 26
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Implementación de la interfaz
public class Persona extends SerVivo
implements EnteMovil
{
public Persona(String nombre)
{
super(nombre);
}
/** Implementación del método posicion
* definido en la interfaz EnteMovil
*/
public double posicion() {
return pos;
}
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 27
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Uso de la interfaz
Uso polimórfico del método 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 MATEMÁTICAS, © Michael González Harbour 28
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
1.4 Estructuras de datos genéricas
La abstracción por genericidad se implementa en Java mediante
módulos genéricos
• permiten hacer que un módulo sea independiente de una
determinada clase de objetos
• esta clase queda indeterminada
• ejemplo de módulo genérico: una lista de objetos de una clase
indeterminada
Al crear un objeto a partir de una clase genérica
• es preciso indicar la clase que quedó indeterminada mediante
un parámetro genérico
• por ejemplo, podemos decir que los objetos de la lista son de la
clase Alumno
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 29
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Módulos genéricos (cont.)
Al usar el objeto
• puede usarse con objetos de la clase del parámetro genérico o
de sus subclases
• por ejemplo, podemos almacenar en la lista, usando sus
métodos, objetos de la clase Alumno, o de sus subclases
Declaración de módulos genéricos
public class Nombre <T> {...}
T es el parámetro genérico
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 30
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo
/**
* Almacén de un objeto cualquiera
* (del tipo T indeterminado)
*/
public class Almacen <T>
{
private T contenido;
private boolean hayAlgo;
/**Constructor que deja el almacén vacío */
public Almacen()
{
hayAlgo=false;
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 31
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo
/** Indica si el almacén tiene o no dato */
public boolean hayAlgo()
{
return hayAlgo;
}
/** Meter un dato en el almacén */
public void almacena(T dato)
{
contenido=dato;
hayAlgo=true;
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 32
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo
/** Sacar un dato del almacén */
public T saca() throws NoHay {
if (hayAlgo) {
hayAlgo=false;
return contenido;
} else {
throw new NoHay();
}
}
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 33
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Uso de un módulo genérico
Para crear objetos a partir de una clase genérica hay que indicar
cuál es el parámetro genérico
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 MATEMÁTICAS, © Michael González Harbour 34
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
1.5 Colecciones
En Java hay diversas clases genéricas predefinidas para
almacenar datos con diversas estructuras: Java Collections
<<interfaz>>
Collection
<<interfaz>>
Queue
PriorityQueueArrayList LinkedList
<<interfaz>>
List
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 35
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Colecciones (cont.)
Los conjuntos son otra extensión de la interfaz Collection
HashSet
<<interfaz>>
Collection <<interfaz>>
Set
<<interfaz>>
SortedSet
TreeSet
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 36
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Colecciones (cont.)
Los mapas forman una jerarquía aparte dentro de las Java
Collections
HashMap
<<interfaz>>
Map
<<interfaz>>
SortedMap
TreeMap
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 37
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Colecciones (cont.)
Las colecciones están en el paquete java.util
Interfaz Descripción
Collection Colección de cero o más elementos, que se pueden añadir o
quitar
List Colección que admite elementos repetidos y en los que éstos
tienen un orden establecido
Queue Colección para el almacenamiento de datos intermedios, con
operaciones adicionales de inserción y consulta
Set Conjunto: no admite elementos repetidos
SortedSet Conjunto en el que los elementos están en orden ascendente
Map Contiene pares de valores {clave,valor}, para poder obtener un
valor dada una clave
SortedMap Mapa en el que las parejas se ordenan por sus claves
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 38
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Colecciones (cont.)
Clase Descripción
ArrayList Tabla de tamaño que puede crecer. Antes se llamaba Vector
LinkedList Lista de tamaño indefinido, con operaciones de inserción y eli-
minación que son O(1). También sirve para definir colas (FIFO)
y pilas
PriorityQueue Cola de prioridad, donde los elementos se almacenan ordena-
dos según una relación de orden establecida al crearla
HashSet Conjunto implementado con tablas de troceado (hash) que
habitualmente tiene tiempos de inserción, eliminación y bús-
queda que son O(1)
TreeSet Conjunto implementado con árbol binario con operaciones de
inserción, eliminación y búsqueda que son O(log n)
HashMap Mapa con operaciones que habitualmente son O(1)
TreeMap Mapa con operaciones que habitualmente son O(log n)
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 39
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
1.6 Iteradores
Un iterador definido sobre una colección nos permite visitar todos
sus elementos uno por uno
• permite implementar un algoritmo de recorrido o de búsqueda
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 MATEMÁTICAS, © Michael González Harbour 40
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
La interfaz del iterador
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 MATEMÁTICAS, © Michael González Harbour 41
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
La interfaz del iterador
/**
* Elimina el elemento previo de la colección
* Lanza IllegalStateException si no hay
* previo o si ya se había borrado desde la
* ultima llamada a next()
*/
public void remove();
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 42
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Uso del iterador
Las colecciones Java implementan la interfaz Iterable
• por ella disponen del método iterator() que se usa para
obtener un iterador sobre la colección
Ejemplo:
LinkedList <MiClase> lista= ...;
...
Iterator <MiClase> iter=lista.iterator();
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 43
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
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 vacía
*/
public Ruta(){
lista=new LinkedList<Coordenada>();
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 44
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
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());
}
}
...
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 45
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplos
Codificar un método para buscar un elemento en una colección y
borrarlo
Codificar un método para borrar todos los elementos de una
colección mostrándolos en pantalla según se borran
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 46
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
El iterador de listas
La interfaz ListIterator permite iterar sobre los elementos de
una lista pudiendo recorrerla hacia adelante (next()) o hacia atrás
(previous())
Se obtiene con el método listIterator()
Ejemplo
LinkedList <MiClase> lista= ...;
...
ListIterator <MiClase> iter=
lista.listIterator();
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 47
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
La instrucción “for-each”
El bucle for tiene un modo especial para recorrer todos los
elementos de un array o de una colección
// Colección 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 colección.
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 48
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
1.7 Relaciones de igualdad y orden
Todos los objetos java disponen del método equals() para
comparar dos objetos
• definido en la superclase Object
public boolean equals(Object o)
Por omisión, este método compara las referencias de los objetos
• podemos redefinirlo para que haga lo que necesitemos
Nota: Debe redefinirse de manera consistente el método de
troceado hashCode(), que estudiaremos más adelante
• Los objetos iguales deben tener códigos de troceado iguales
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 49
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Propiedades de la igualdad
• el método equals() debe ser
- 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 MATEMÁTICAS, © Michael González Harbour 50
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo
public class Coordenada {
// atributos privados
private double lat,lon; // grados
/**
* Redefinimos la comparación, 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 MATEMÁTICAS, © Michael González Harbour 51
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ordenación
Dados unos valores con dos operaciones de igualdad (==) y orden
(<)
• una relación 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 relación de
orden total
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 52
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Comparación
La interfaz Comparable especifica una operación de comparación
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 relación de orden total
• debe ser consistente con equals()
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 53
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo
import java.util.*;
public class Alumno
implements Comparable <Alumno>
{
private String nombre;
private String dni;
public boolean equals(Object o) {
if (o instanceof Alumno) {
return this.dni.equals(((Alumno)o).dni);
} else {
return false;
}
}
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 54
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Ejemplo (cont.)
/**
* Comparación
*/
public int compareTo(Alumno a) {
return this.dni.compareTo(a.dni);
}
}
Observar la asimetría:
• equals tiene como parámetro un Object
• compareTo tiene como parámetro un Alumno
DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 55
ESTADÍSTICA Y COMPUTACIÓN 23/sept/09
UNIVERSIDAD
DE CANTABRIA
Comparadores
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 sólo puede tener un método compareTo()
Pero puede tener varios Comparadores, que implementan la
interfaz Comparator

Mais conteúdo relacionado

Mais procurados

Mais procurados (18)

Clase 8- Diseño indirecto de Controladores digitales
Clase 8- Diseño indirecto de Controladores digitalesClase 8- Diseño indirecto de Controladores digitales
Clase 8- Diseño indirecto de Controladores digitales
 
Aplicaciones La Transformada De Laplace
Aplicaciones La Transformada De LaplaceAplicaciones La Transformada De Laplace
Aplicaciones La Transformada De Laplace
 
La derivada
La derivadaLa derivada
La derivada
 
Modelos de sistemas
Modelos de sistemasModelos de sistemas
Modelos de sistemas
 
Practica 5 funciones compuestas e inversas
Practica 5 funciones compuestas e inversasPractica 5 funciones compuestas e inversas
Practica 5 funciones compuestas e inversas
 
Ondas de choque formulas
Ondas de choque formulasOndas de choque formulas
Ondas de choque formulas
 
La Derivada
La DerivadaLa Derivada
La Derivada
 
La derivada en el mundo real
La derivada en el mundo realLa derivada en el mundo real
La derivada en el mundo real
 
Formulas de transformada de laplace
Formulas de transformada de laplaceFormulas de transformada de laplace
Formulas de transformada de laplace
 
02022008 formulas2
02022008 formulas202022008 formulas2
02022008 formulas2
 
Transformada de laplace propiedades
Transformada de laplace propiedadesTransformada de laplace propiedades
Transformada de laplace propiedades
 
digitalizacion de controladores
digitalizacion de controladoresdigitalizacion de controladores
digitalizacion de controladores
 
Dinamica ii 2009 cuartos
Dinamica ii 2009 cuartosDinamica ii 2009 cuartos
Dinamica ii 2009 cuartos
 
Coloides amfifilos
Coloides amfifilosColoides amfifilos
Coloides amfifilos
 
Conrado slides
Conrado slidesConrado slides
Conrado slides
 
Movimiento rectilineo uniforme
Movimiento rectilineo uniformeMovimiento rectilineo uniforme
Movimiento rectilineo uniforme
 
Kinetics ii
Kinetics iiKinetics ii
Kinetics ii
 
Analisis de Algoritmos tarea 1
Analisis de Algoritmos tarea 1Analisis de Algoritmos tarea 1
Analisis de Algoritmos tarea 1
 

Semelhante a Cap1 intro-2en1

Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2Velmuz Buzz
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSEvans Balcazar
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSEvans Balcazar
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmosAlvaro Enrique Ruano
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmosrehoscript
 
Analisis Clase2
Analisis  Clase2Analisis  Clase2
Analisis Clase2luzenith_g
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaRolf Pinto
 
Metodos pert-cpm
Metodos pert-cpmMetodos pert-cpm
Metodos pert-cpmmerygean
 
PRESENTACIóN PERT CPM v2 .pptx
PRESENTACIóN PERT CPM v2 .pptxPRESENTACIóN PERT CPM v2 .pptx
PRESENTACIóN PERT CPM v2 .pptxalejandra724992
 
Modelos 3 __adveccion
Modelos 3 __adveccionModelos 3 __adveccion
Modelos 3 __adveccionLuis Ramos
 
16 Complejidad
16 Complejidad16 Complejidad
16 ComplejidadUVM
 
Tema1 josselyn arias funciones d probabilidad
Tema1 josselyn arias funciones d probabilidadTema1 josselyn arias funciones d probabilidad
Tema1 josselyn arias funciones d probabilidadJosselyn Arias
 
Eficiencia de algoritmos - Vanessa Ramirez
Eficiencia de algoritmos - Vanessa RamirezEficiencia de algoritmos - Vanessa Ramirez
Eficiencia de algoritmos - Vanessa RamirezVanessa Ramirez
 

Semelhante a Cap1 intro-2en1 (20)

Tema4
Tema4Tema4
Tema4
 
Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2
 
Unidad 4 control21
Unidad 4 control21Unidad 4 control21
Unidad 4 control21
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOS
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOS
 
05 - Analisis de Algoritmos.pptx
05 - Analisis de Algoritmos.pptx05 - Analisis de Algoritmos.pptx
05 - Analisis de Algoritmos.pptx
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmos
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmos
 
Cap2.1
Cap2.1Cap2.1
Cap2.1
 
Analisis Clase2
Analisis  Clase2Analisis  Clase2
Analisis Clase2
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
 
Metodos pert-cpm
Metodos pert-cpmMetodos pert-cpm
Metodos pert-cpm
 
CPM Pert- 2.pptx
CPM Pert- 2.pptxCPM Pert- 2.pptx
CPM Pert- 2.pptx
 
PRESENTACIóN PERT CPM v2 .pptx
PRESENTACIóN PERT CPM v2 .pptxPRESENTACIóN PERT CPM v2 .pptx
PRESENTACIóN PERT CPM v2 .pptx
 
Modelos 3 __adveccion
Modelos 3 __adveccionModelos 3 __adveccion
Modelos 3 __adveccion
 
16 Complejidad
16 Complejidad16 Complejidad
16 Complejidad
 
Investigación de operaciones PERT
Investigación de operaciones PERTInvestigación de operaciones PERT
Investigación de operaciones PERT
 
Fourier mat lab
Fourier mat labFourier mat lab
Fourier mat lab
 
Tema1 josselyn arias funciones d probabilidad
Tema1 josselyn arias funciones d probabilidadTema1 josselyn arias funciones d probabilidad
Tema1 josselyn arias funciones d probabilidad
 
Eficiencia de algoritmos - Vanessa Ramirez
Eficiencia de algoritmos - Vanessa RamirezEficiencia de algoritmos - Vanessa Ramirez
Eficiencia de algoritmos - Vanessa Ramirez
 

Último

Nueva Ley de Bases - Proyecto de Ley del Gobierno
Nueva Ley de Bases - Proyecto de Ley del GobiernoNueva Ley de Bases - Proyecto de Ley del Gobierno
Nueva Ley de Bases - Proyecto de Ley del GobiernoAriel Fernández Lavilla
 
Observatorio Digital de los Gobernadores
Observatorio Digital de los GobernadoresObservatorio Digital de los Gobernadores
Observatorio Digital de los GobernadoresEconomis
 
1er y 2do gobierno alan garcia final.pptx
1er y 2do gobierno alan garcia final.pptx1er y 2do gobierno alan garcia final.pptx
1er y 2do gobierno alan garcia final.pptxJohanaManuelaSolisPa
 
Código de Procedimiento Minero de la Provincia de Mendoza
Código de Procedimiento Minero de la Provincia de MendozaCódigo de Procedimiento Minero de la Provincia de Mendoza
Código de Procedimiento Minero de la Provincia de MendozaRicardo Montacuto
 
El Gobierno pagó los intereses del Bono Verde
El Gobierno pagó los intereses del Bono VerdeEl Gobierno pagó los intereses del Bono Verde
El Gobierno pagó los intereses del Bono VerdeEduardo Nelson German
 
La Corte rechazó la demanda de Quintela contra DNU
La Corte rechazó la demanda de Quintela contra DNULa Corte rechazó la demanda de Quintela contra DNU
La Corte rechazó la demanda de Quintela contra DNUEduardo Nelson German
 
Programa Aguraingo Jaiak 2012. Programa de Fiestas de Agurain 2012
Programa Aguraingo Jaiak 2012. Programa de Fiestas de Agurain 2012Programa Aguraingo Jaiak 2012. Programa de Fiestas de Agurain 2012
Programa Aguraingo Jaiak 2012. Programa de Fiestas de Agurain 2012AguraingoUdala
 
Boletin semanal informativo 14. Abril 2024
Boletin semanal informativo 14. Abril 2024Boletin semanal informativo 14. Abril 2024
Boletin semanal informativo 14. Abril 2024Nueva Canarias-BC
 
Infografia totalitarismo_ Paula Lema.pdf
Infografia totalitarismo_ Paula Lema.pdfInfografia totalitarismo_ Paula Lema.pdf
Infografia totalitarismo_ Paula Lema.pdfpaulalema3
 
fechas cívicas... EN EL AÑO ESCOLAR 2024
fechas cívicas... EN EL AÑO ESCOLAR 2024fechas cívicas... EN EL AÑO ESCOLAR 2024
fechas cívicas... EN EL AÑO ESCOLAR 2024nella34
 
CRISIS DIPLOMÁTICA MÉXICO-ECUADOR....pdf
CRISIS DIPLOMÁTICA MÉXICO-ECUADOR....pdfCRISIS DIPLOMÁTICA MÉXICO-ECUADOR....pdf
CRISIS DIPLOMÁTICA MÉXICO-ECUADOR....pdfLougianiCastilloGarc
 
MAPA DEL TALENTO 2023 de Cotec e Instituto Valenciano de Investigaciones Econ...
MAPA DEL TALENTO 2023 de Cotec e Instituto Valenciano de Investigaciones Econ...MAPA DEL TALENTO 2023 de Cotec e Instituto Valenciano de Investigaciones Econ...
MAPA DEL TALENTO 2023 de Cotec e Instituto Valenciano de Investigaciones Econ...DiariodeNoticiasZero
 
La imagen de Javier Milei sigue blindada
La imagen de Javier Milei sigue blindadaLa imagen de Javier Milei sigue blindada
La imagen de Javier Milei sigue blindadaEconomis
 
TERRASOL FELICITA A LILIANA ROJAS SILVA.pdf
TERRASOL FELICITA A LILIANA ROJAS SILVA.pdfTERRASOL FELICITA A LILIANA ROJAS SILVA.pdf
TERRASOL FELICITA A LILIANA ROJAS SILVA.pdfmegaradioexpress
 
CV Carolina Leverón periodista y comunicadora especializada en creación de co...
CV Carolina Leverón periodista y comunicadora especializada en creación de co...CV Carolina Leverón periodista y comunicadora especializada en creación de co...
CV Carolina Leverón periodista y comunicadora especializada en creación de co...CarolinaLeveron
 
Topología discursiva del Movimiento Justicialista
Topología discursiva del Movimiento JusticialistaTopología discursiva del Movimiento Justicialista
Topología discursiva del Movimiento JusticialistaJulio Otero Santamaría
 
PRECIOS_M_XIMOS_VIGENTES_DEL_14_AL_20_DE_ABRIL_DE_2024.pdf
PRECIOS_M_XIMOS_VIGENTES_DEL_14_AL_20_DE_ABRIL_DE_2024.pdfPRECIOS_M_XIMOS_VIGENTES_DEL_14_AL_20_DE_ABRIL_DE_2024.pdf
PRECIOS_M_XIMOS_VIGENTES_DEL_14_AL_20_DE_ABRIL_DE_2024.pdfredaccionxalapa
 
Aguraingo jaiak 2008. Fiestas de Agurain 2008
Aguraingo jaiak 2008. Fiestas de Agurain 2008Aguraingo jaiak 2008. Fiestas de Agurain 2008
Aguraingo jaiak 2008. Fiestas de Agurain 2008AguraingoUdala
 

Último (19)

Nueva Ley de Bases - Proyecto de Ley del Gobierno
Nueva Ley de Bases - Proyecto de Ley del GobiernoNueva Ley de Bases - Proyecto de Ley del Gobierno
Nueva Ley de Bases - Proyecto de Ley del Gobierno
 
Observatorio Digital de los Gobernadores
Observatorio Digital de los GobernadoresObservatorio Digital de los Gobernadores
Observatorio Digital de los Gobernadores
 
1er y 2do gobierno alan garcia final.pptx
1er y 2do gobierno alan garcia final.pptx1er y 2do gobierno alan garcia final.pptx
1er y 2do gobierno alan garcia final.pptx
 
Código de Procedimiento Minero de la Provincia de Mendoza
Código de Procedimiento Minero de la Provincia de MendozaCódigo de Procedimiento Minero de la Provincia de Mendoza
Código de Procedimiento Minero de la Provincia de Mendoza
 
El Gobierno pagó los intereses del Bono Verde
El Gobierno pagó los intereses del Bono VerdeEl Gobierno pagó los intereses del Bono Verde
El Gobierno pagó los intereses del Bono Verde
 
La Corte rechazó la demanda de Quintela contra DNU
La Corte rechazó la demanda de Quintela contra DNULa Corte rechazó la demanda de Quintela contra DNU
La Corte rechazó la demanda de Quintela contra DNU
 
Programa Aguraingo Jaiak 2012. Programa de Fiestas de Agurain 2012
Programa Aguraingo Jaiak 2012. Programa de Fiestas de Agurain 2012Programa Aguraingo Jaiak 2012. Programa de Fiestas de Agurain 2012
Programa Aguraingo Jaiak 2012. Programa de Fiestas de Agurain 2012
 
Boletin semanal informativo 14. Abril 2024
Boletin semanal informativo 14. Abril 2024Boletin semanal informativo 14. Abril 2024
Boletin semanal informativo 14. Abril 2024
 
Infografia totalitarismo_ Paula Lema.pdf
Infografia totalitarismo_ Paula Lema.pdfInfografia totalitarismo_ Paula Lema.pdf
Infografia totalitarismo_ Paula Lema.pdf
 
fechas cívicas... EN EL AÑO ESCOLAR 2024
fechas cívicas... EN EL AÑO ESCOLAR 2024fechas cívicas... EN EL AÑO ESCOLAR 2024
fechas cívicas... EN EL AÑO ESCOLAR 2024
 
CRISIS DIPLOMÁTICA MÉXICO-ECUADOR....pdf
CRISIS DIPLOMÁTICA MÉXICO-ECUADOR....pdfCRISIS DIPLOMÁTICA MÉXICO-ECUADOR....pdf
CRISIS DIPLOMÁTICA MÉXICO-ECUADOR....pdf
 
MAPA DEL TALENTO 2023 de Cotec e Instituto Valenciano de Investigaciones Econ...
MAPA DEL TALENTO 2023 de Cotec e Instituto Valenciano de Investigaciones Econ...MAPA DEL TALENTO 2023 de Cotec e Instituto Valenciano de Investigaciones Econ...
MAPA DEL TALENTO 2023 de Cotec e Instituto Valenciano de Investigaciones Econ...
 
La imagen de Javier Milei sigue blindada
La imagen de Javier Milei sigue blindadaLa imagen de Javier Milei sigue blindada
La imagen de Javier Milei sigue blindada
 
TERRASOL FELICITA A LILIANA ROJAS SILVA.pdf
TERRASOL FELICITA A LILIANA ROJAS SILVA.pdfTERRASOL FELICITA A LILIANA ROJAS SILVA.pdf
TERRASOL FELICITA A LILIANA ROJAS SILVA.pdf
 
CV Carolina Leverón periodista y comunicadora especializada en creación de co...
CV Carolina Leverón periodista y comunicadora especializada en creación de co...CV Carolina Leverón periodista y comunicadora especializada en creación de co...
CV Carolina Leverón periodista y comunicadora especializada en creación de co...
 
Topología discursiva del Movimiento Justicialista
Topología discursiva del Movimiento JusticialistaTopología discursiva del Movimiento Justicialista
Topología discursiva del Movimiento Justicialista
 
LA CRÓNICA COMARCA DE ANTEQUERA _ Nº 1076
LA CRÓNICA COMARCA DE ANTEQUERA _ Nº 1076LA CRÓNICA COMARCA DE ANTEQUERA _ Nº 1076
LA CRÓNICA COMARCA DE ANTEQUERA _ Nº 1076
 
PRECIOS_M_XIMOS_VIGENTES_DEL_14_AL_20_DE_ABRIL_DE_2024.pdf
PRECIOS_M_XIMOS_VIGENTES_DEL_14_AL_20_DE_ABRIL_DE_2024.pdfPRECIOS_M_XIMOS_VIGENTES_DEL_14_AL_20_DE_ABRIL_DE_2024.pdf
PRECIOS_M_XIMOS_VIGENTES_DEL_14_AL_20_DE_ABRIL_DE_2024.pdf
 
Aguraingo jaiak 2008. Fiestas de Agurain 2008
Aguraingo jaiak 2008. Fiestas de Agurain 2008Aguraingo jaiak 2008. Fiestas de Agurain 2008
Aguraingo jaiak 2008. Fiestas de Agurain 2008
 

Cap1 intro-2en1

  • 1. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 1 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Estructuras de datos y algoritmos 1. Introducción 2. Estructuras de datos lineales 3. Estructuras de datos jerárquicas 4. Grafos y caminos 5. Implementación de listas, colas, y pilas 6. Implementación de mapas, árboles, y grafos DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 2 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 1. Introducción • 1.1 Estructuras de datos abstractas • 1.2 Eficiencia de las estructuras de datos • 1.3 Interfaces y herencia múltiple • 1.4 Estructuras de datos genéricas • 1.5 Colecciones • 1.6 Iteradores • 1.7 Relaciones de igualdad y orden
  • 2. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 3 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 1.1 Estructuras de datos abstractas Una estructura o tipo de datos abstracto (ADT) es una clase o módulo de programa que contiene: • datos privados, con una determinada estructura • un conjunto de métodos públicos para manejar esos datos El conjunto de operaciones permite el uso de la estructura de datos sin conocer los detalles de su implementación • 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 implementación DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 4 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Encapsulamiento Se dice que la clase encapsula el tipo de datos junto a sus operaciones, ocultando los detalles internos • consiguen la reutilización de código • para muy diversas aplicaciones Por ejemplo, las listas o colas que estudiamos el año pasado • aunque necesitamos saber la eficiencia de los métodos Operación 1 Operación 2 Operación n Estado Objeto Parte Pública Parte Privada
  • 3. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 5 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 1.2 Eficiencia de las estructuras de datos Entre los criterios a tener en cuenta al diseñar o elegir un algoritmo están su complejidad, y su tiempo de ejecución El tiempo de ejecución depende de factores variados y, muy en particular, del tamaño del problema El tiempo de ejecución puede ser: • exacto: es muy difícil de predecir; normalmente sólo se puede saber midiéndolo • predicción del ritmo de crecimiento del tiempo de ejecución con respecto al tamaño del problema DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 6 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA La “tiranía” del ritmo de crecimiento 0 1000 2000 3000 1 6 11 16 21 26 n T(n) 2n n3 /2 5n2 100n
  • 4. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 7 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA La “tiranía” del ritmo de crecimiento (cont.) Función n=25 n=50 100n 2.5 seg 5.0 seg 5n2 3.12 seg 12.5 seg n3/2 7.81 seg 62.5 seg 2n 33554.43 seg 35677 años DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 8 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA La notación O(n) El tiempo de ejecución depende no sólo de la cantidad de datos (n) sino también de cuáles 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 notación O(n): • decimos que T(n) es O(f(n)) si existen constantes c y n0 tales que T(n)≤c⋅f(n) para todo n≥n0 La notación O(n) muestra una cota superior al ritmo de crecimiento de un algoritmo
  • 5. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 9 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA La notación O(n) (cont.) El tiempo en la notación O(n) es relativo • Las unidades de T(n) son inespecíficas Por ejemplo, la función T(n) = 3n3 +2n2 es O(n3 ). • Basta hacer c=5 y no=0 para comprobarlo, 3n3 +2n2 ≤ 5n3 En definitiva, cuando decimos que T(n) es O(f(n)), esto significa que f(n) es el límite de la velocidad de crecimiento de T(n) DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 10 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA La notación Ω(n) También se puede expresar un límite inferior al ritmo de crecimiento de T(n) mediante la notación Ω(n): • decimos que T(n) es Ω(g(n)) si existe una constante c tal que T(n)≥c.g(n) para un número 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 ejecución son O(n2 ) y O(n3 ) • ¿Qué ocurre si las constantes son 100n2 y 5n3?
  • 6. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 11 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Cálculo del tiempo de ejecución 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))) Es decir, que la suma de los tiempos de ejecución de dos algoritmos tiene un ritmo de crecimiento igual al del máximo de los dos Por ejemplo, para tiempos polinómicos T(n)=anp +bnp-1 +... • entonces T(n) es O(np) DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 12 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Cálculo del tiempo de ejecución 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))) Es decir, que el producto de los tiempos de ejecución 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(c⋅f(n)) entonces también es O(f(n)), ya que c es O(1)
  • 7. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 13 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ritmos de crecimiento más habituales 1. O(1), o constante 2. O(log(n)), o logarítmico 3. O(n), o lineal 4. O(n⋅log(n)) 5. O(n2), o cuadrático 6. O(nx ), o polinómico 7. O(2n ), o exponencial DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 14 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA .Ritmos de crecimiento más habituales n 1 log(n) n⋅log(n) n2 128 1 7 896 16384 256 1 8 2048 65536 512 1 9 4608 262144 1024 1 10 10240 1048576 2048 1 11 22528 4194304 4096 1 12 49152 16777216 8192 1 13 106496 67108864 16384 1 14 229376 268435456 32768 1 15 491520 1073741824
  • 8. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 15 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Pistas para el análisis Instrucciones simples (asignación y op. aritméticas): O(1) Secuencia de instrucciones simples: O(max(1,1,1)) = O(1) Instrucción condicional: • si es un “if” simple y no se conoce el valor de la condición, se supone que la parte condicional se ejecuta siempre • si es un “if” con parte “else” y no se conoce el valor de la condición, se elige la que más tarde de las dos partes Bucle: número de veces, por lo que tarden sus instrucciones Procedimientos recursivos: número de veces que se llama a sí mismo, por lo que tarda cada vez DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 16 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo de análisis Analizar el tiempo de ejecución del siguiente algoritmo: método 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; fmétodo;
  • 9. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 17 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo (cont.) N es el nº de elementos a ordenar. Vamos a analizar el programa desde el interior hacia el exterior • Cada instrucción de asignación es O(1), independiente de la dimensión 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 línea (2) y abarca hasta la línea (6) tiene un cuerpo que toma un tiempo de la forma O(1) en cada iteración, y como toma n-i iteraciones, el tiempo gastado en ese lazo es O((n-i)⋅1) que es O(n-i). DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 18 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo (cont.) • El último lazo se ejecuta n-1 veces, de forma que el tiempo total de ejecución esta limitado superiormente por: • que es O(n2 ) n i–( ) i 1= n 1– ∑ 1 2 ---n n 1–( ) n 2 2 ----- n 2 ---–= =
  • 10. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 19 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo de análisis recursivo método 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; La función se llama a sí misma n veces, y cada ejecución es O(1), luego en definitiva factorial es O(n) DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 20 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 1.3 Interfaces y Herencia Múltiple En el curso pasado hablamos de la extensión de clases por herencia: Vehiculo Coche Barco Persona Ser Vivo
  • 11. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 21 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Herencia múltiple Podemos imaginar que podemos querer heredar de varias jerarquías, con herencia múltiple Vehiculo Coche Barco Persona Ser Vivo Ente móvil posicion() DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 22 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Herencia Múltiple La herencia múltiple sin restricciones presenta anomalías • atributos del mismo nombre • métodos iguales con distinta implementación Es fácil equivocarse • se permite en C++ En Java para la herencia múltiple se usa el mecanismo conocido como Interfaz
  • 12. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 23 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Interfaz Java Representa una clase abstracta de la que no se pueden crear objetos • se usa sólo para herencia (incluida la herencia múltiple) • no tiene estado - los atributos sólo son públicos y finales (constantes) • los métodos son abstractos - no tienen instrucciones, sólo cabecera - están 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 MATEMÁTICAS, © Michael González Harbour 24 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Extensión de interfaces Una clase puede • extender a una sola clase • implementar varias interfaces Una interfaz puede • extender a otra interfaz
  • 13. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 25 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Especificación de una interfaz Es como una clase, pero usa la palabra interface • los métodos son públicos, pero no se pone la palabra public Ejemplo public interface EnteMovil { double posicion(); } DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 26 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Implementación de la interfaz public class Persona extends SerVivo implements EnteMovil { public Persona(String nombre) { super(nombre); } /** Implementación del método posicion * definido en la interfaz EnteMovil */ public double posicion() { return pos; } }
  • 14. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 27 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Uso de la interfaz Uso polimórfico del método 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 MATEMÁTICAS, © Michael González Harbour 28 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 1.4 Estructuras de datos genéricas La abstracción por genericidad se implementa en Java mediante módulos genéricos • permiten hacer que un módulo sea independiente de una determinada clase de objetos • esta clase queda indeterminada • ejemplo de módulo genérico: una lista de objetos de una clase indeterminada Al crear un objeto a partir de una clase genérica • es preciso indicar la clase que quedó indeterminada mediante un parámetro genérico • por ejemplo, podemos decir que los objetos de la lista son de la clase Alumno
  • 15. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 29 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Módulos genéricos (cont.) Al usar el objeto • puede usarse con objetos de la clase del parámetro genérico o de sus subclases • por ejemplo, podemos almacenar en la lista, usando sus métodos, objetos de la clase Alumno, o de sus subclases Declaración de módulos genéricos public class Nombre <T> {...} T es el parámetro genérico DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 30 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo /** * Almacén de un objeto cualquiera * (del tipo T indeterminado) */ public class Almacen <T> { private T contenido; private boolean hayAlgo; /**Constructor que deja el almacén vacío */ public Almacen() { hayAlgo=false; }
  • 16. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 31 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo /** Indica si el almacén tiene o no dato */ public boolean hayAlgo() { return hayAlgo; } /** Meter un dato en el almacén */ public void almacena(T dato) { contenido=dato; hayAlgo=true; } DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 32 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo /** Sacar un dato del almacén */ public T saca() throws NoHay { if (hayAlgo) { hayAlgo=false; return contenido; } else { throw new NoHay(); } } }
  • 17. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 33 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Uso de un módulo genérico Para crear objetos a partir de una clase genérica hay que indicar cuál es el parámetro genérico 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 MATEMÁTICAS, © Michael González Harbour 34 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 1.5 Colecciones En Java hay diversas clases genéricas predefinidas para almacenar datos con diversas estructuras: Java Collections <<interfaz>> Collection <<interfaz>> Queue PriorityQueueArrayList LinkedList <<interfaz>> List
  • 18. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 35 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Colecciones (cont.) Los conjuntos son otra extensión de la interfaz Collection HashSet <<interfaz>> Collection <<interfaz>> Set <<interfaz>> SortedSet TreeSet DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 36 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Colecciones (cont.) Los mapas forman una jerarquía aparte dentro de las Java Collections HashMap <<interfaz>> Map <<interfaz>> SortedMap TreeMap
  • 19. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 37 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Colecciones (cont.) Las colecciones están en el paquete java.util Interfaz Descripción Collection Colección de cero o más elementos, que se pueden añadir o quitar List Colección que admite elementos repetidos y en los que éstos tienen un orden establecido Queue Colección para el almacenamiento de datos intermedios, con operaciones adicionales de inserción y consulta Set Conjunto: no admite elementos repetidos SortedSet Conjunto en el que los elementos están en orden ascendente Map Contiene pares de valores {clave,valor}, para poder obtener un valor dada una clave SortedMap Mapa en el que las parejas se ordenan por sus claves DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 38 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Colecciones (cont.) Clase Descripción ArrayList Tabla de tamaño que puede crecer. Antes se llamaba Vector LinkedList Lista de tamaño indefinido, con operaciones de inserción y eli- minación que son O(1). También sirve para definir colas (FIFO) y pilas PriorityQueue Cola de prioridad, donde los elementos se almacenan ordena- dos según una relación de orden establecida al crearla HashSet Conjunto implementado con tablas de troceado (hash) que habitualmente tiene tiempos de inserción, eliminación y bús- queda que son O(1) TreeSet Conjunto implementado con árbol binario con operaciones de inserción, eliminación y búsqueda que son O(log n) HashMap Mapa con operaciones que habitualmente son O(1) TreeMap Mapa con operaciones que habitualmente son O(log n)
  • 20. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 39 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 1.6 Iteradores Un iterador definido sobre una colección nos permite visitar todos sus elementos uno por uno • permite implementar un algoritmo de recorrido o de búsqueda 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 MATEMÁTICAS, © Michael González Harbour 40 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA La interfaz del iterador 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();
  • 21. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 41 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA La interfaz del iterador /** * Elimina el elemento previo de la colección * Lanza IllegalStateException si no hay * previo o si ya se había borrado desde la * ultima llamada a next() */ public void remove(); } DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 42 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Uso del iterador Las colecciones Java implementan la interfaz Iterable • por ella disponen del método iterator() que se usa para obtener un iterador sobre la colección Ejemplo: LinkedList <MiClase> lista= ...; ... Iterator <MiClase> iter=lista.iterator();
  • 22. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 43 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 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 vacía */ public Ruta(){ lista=new LinkedList<Coordenada>(); } DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 44 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 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()); } } ... }
  • 23. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 45 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplos Codificar un método para buscar un elemento en una colección y borrarlo Codificar un método para borrar todos los elementos de una colección mostrándolos en pantalla según se borran DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 46 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA El iterador de listas La interfaz ListIterator permite iterar sobre los elementos de una lista pudiendo recorrerla hacia adelante (next()) o hacia atrás (previous()) Se obtiene con el método listIterator() Ejemplo LinkedList <MiClase> lista= ...; ... ListIterator <MiClase> iter= lista.listIterator();
  • 24. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 47 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA La instrucción “for-each” El bucle for tiene un modo especial para recorrer todos los elementos de un array o de una colección // Colección 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 colección. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 48 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA 1.7 Relaciones de igualdad y orden Todos los objetos java disponen del método equals() para comparar dos objetos • definido en la superclase Object public boolean equals(Object o) Por omisión, este método compara las referencias de los objetos • podemos redefinirlo para que haga lo que necesitemos Nota: Debe redefinirse de manera consistente el método de troceado hashCode(), que estudiaremos más adelante • Los objetos iguales deben tener códigos de troceado iguales
  • 25. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 49 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Propiedades de la igualdad • el método equals() debe ser - 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 MATEMÁTICAS, © Michael González Harbour 50 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo public class Coordenada { // atributos privados private double lat,lon; // grados /** * Redefinimos la comparación, 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; } }
  • 26. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 51 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ordenación Dados unos valores con dos operaciones de igualdad (==) y orden (<) • una relación 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 relación de orden total DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 52 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Comparación La interfaz Comparable especifica una operación de comparación 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 relación de orden total • debe ser consistente con equals()
  • 27. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 53 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo import java.util.*; public class Alumno implements Comparable <Alumno> { private String nombre; private String dni; public boolean equals(Object o) { if (o instanceof Alumno) { return this.dni.equals(((Alumno)o).dni); } else { return false; } } DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 54 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Ejemplo (cont.) /** * Comparación */ public int compareTo(Alumno a) { return this.dni.compareTo(a.dni); } } Observar la asimetría: • equals tiene como parámetro un Object • compareTo tiene como parámetro un Alumno
  • 28. DEPARTAMENTO DE MATEMÁTICAS, © Michael González Harbour 55 ESTADÍSTICA Y COMPUTACIÓN 23/sept/09 UNIVERSIDAD DE CANTABRIA Comparadores 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 sólo puede tener un método compareTo() Pero puede tener varios Comparadores, que implementan la interfaz Comparator