Tablas hash Juan Ramón Pérez Pérez Prácticas EDI - © Juan Ramón Pérez.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Técnicas avanzadas en java 1.4 y java 5.0
Curso de java básico (scjp)
Los paquetes básicos de Java son los de uso más habitual, contienen clases que se emplean en todo tipo de aplicaciones Java. A continuación ofrecemos un.
Curso de java básico (scjp)
Curso de java básico (scjp)
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Lenguaje de programación Java
Programación II Listas
Igor Santos Grueiro. Muchos objetos tienen CLAVE.
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Capitulo 3 Java util.
Encapsulamiento y Abstracción
Algoritmo y Estructura de Datos I
Programación por capas: Capa de Clases
Documento en memoria Estructura jerárquica Prácticas EDI - © Juan Ramón Pérez1.
Detalle clase Documento
Definición del lenguaje XML mediante una gramática
Marzo 2007 Lenguajes Visuales Clase III.
M.I.A Daniel Alejandro García López.  Primer componente: Arreglo de cubetas.- Es una arreglo A de tamaño N, en el que se puede considerar que cada celda.
CURSO STRUTS 2 CONVERSIÓN DE TIPOS
Manipulación de caracteres e hileras de texto
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
 son segmentos de código de un programa que se ejecutan secuencialmente de modo independiente de las otras partes del programa.
Tema 3 J2EE Java Database Connectivity Temas Selectos de Cómputo Grupo 912.
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
Analizador sintáctico Prácticas EDI - © Juan Ramón Pérez1.
Inicio Java: Algunas utilidades. Inicio Temporización En ingeniería nos encontramos con tareas que deben repetirse de forma periódica. Son tareas temporizadas.
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Tema 6: Clases Antonio J. Sierra.
Estructura de la Simulación completa Practicas EDI Juan Ramón Pérez Pérez.
Técnicas avanzadas de programación Interfaces
Colecciones.
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Curso Programación en Java
El lenguaje de programación Java
Servicios Web. Servicios web Son programas con funcionalidad accesible a través de protocolo http que permiten la ejecución remota de métodos y funciones.
Manejo de Vectores y Matirces
Programación Interactiva Eventos y Swing Escuela de Ingeniería de Sistemas y Computación Facultad de Ingeniería Universidad del Valle.
ESTRUCTURA DE DATOS EN JAVA
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Tablas de Hash.
Grafo Juan Ramón Pérez Pérez Prácticas EDI - © Juan Ramón Pérez1.
El lenguaje de programación Java
Valor X Valor Y Punto (0,0) Coordenadas.
Buffer Prácticas de EDI Juan Ramón Pérez Pérez. Buffer Prácticas EDI - © Juan Ramón Pérez2  Clase que hace de intermediaria entre el fichero y el resto.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SIETE GENERICOS Y COLECCIONES.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA SIETE GENERICOS Y COLECCIONES.
Tema 17: java.util Antonio J. Sierra.
Tema II Estructuras de datos en Java Temas Selectos de Cómputo Grupo 912 Agosto-Diciembre 2005.
Optimizar caminos en el mapa de la simulación Juan Ramón Pérez Pérez Mª del Puerto Paule Ruiz Esta obra es publicada bajo una licencia Creative Commons.licencia.
Simulación sobre un grafo Practicas EDI Juan Ramón Pérez Pérez.
Programación orientada a objetos Capítulo 5 Comportamiento mas sofisticado.
Núcleo de la Simulación Practicas EDI Juan Ramón Pérez Pérez.
Implementación del analizador léxico Prácticas EDI - © Juan Ramón Pérez1.
1. 2 Problema Telemóviles, una gran companía de telefonía, requiere mejorar la capacidad de identificación del usuario que llama: –dado un número de usuario,
El lenguaje de programación Java1 8. Colecciones e iteradores - interfaz Collection - clases ArrayList, LinkedList, HashSet, TreeSet - interfaz Map - clases.
Colecciones en JAVA José Luis Redondo García.
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Programación orientada a objetos Capítulo 5 Comportamiento más sofisticado.
ARRAYS Y COLECCIONES DE DATOS. ARRAYS Arrays – Matriz – Vector Elemento del lenguaje que nos permite agrupar un conjunto de valores del mismo tipo, y.
Previo tablas hash Juan Ramón Pérez Pérez Prácticas EDI - © Juan Ramón Pérez1.
Tratamientos Secuenciales Generalizados II Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 19 Versión
Notario electrónico Consejería de Justicia y Administración Pública Dirección General de Organización, Inspección y Calidad de los Servicios Antonio Pedro.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
Transcripción de la presentación:

Tablas hash Juan Ramón Pérez Pérez Prácticas EDI - © Juan Ramón Pérez

¿Cómo funciona la implementación Java para las tablas hash? Paquete java.util Jerarquía de clases HashMap Importancia de los métodos hashCode() y equals() Prácticas EDI - © Juan Ramón Pérez

Jerarquía de clases de la API de Java (fragmento) Collection <<interface>> Map <<interface>> List <<interface>> Set <<interface>> AbstractMap <<abstracta>> ArrayList LinkedList AbstractSet <<abstracta>> HashMap HashTable HashSet Paquete java.util Prácticas EDI - © Juan Ramón Pérez

java.util.HashMap java.util.HashMap HashMap(int initialCapacity, float loadFactor) put(Object key, Object value): Object get(Object key): Object remove(Object key): Object containsKey(Object key): boolean containsValue(Object value): boolean size(): int [...] Insertar Buscar Borrar Prácticas EDI - © Juan Ramón Pérez

Uso de HashMap HashMap hm= new HashMap(); Mercancia m1= new Mercancia(); hm.put(m1.getCodigo(),m1); Mercancia m= hm.get(m1.getCodigo()); Prácticas EDI - © Juan Ramón Pérez

… Y si utilizamos una clave no String Imaginemos que queremos asociar cada mercancía con un objeto repartidor. Y para buscar los objetos mercancía utilizamos el repartidor. HashMap hm= new HashMap(); Repartidor rep1= new Repartidor(“Pepe”); Mercancia m1= new Mercancia(“Paquete fragil”); hm.put(rep1,m1); Repartidor rep= new Repartidor(“Pepe”); Mercancia m= hm.get(); Prácticas EDI - © Juan Ramón Pérez

Para que funcione el ejemplo anterior java.lang.Object Para insertar HashMap necesita un código hash del objeto que actúa como clave (Repartidor). No podemos utilizar directamente el de Object. Para buscar HashMap necesita el código hash y además poder comparar objetos Repartidor. hashCode(): int equals(Object): boolean Repartidor hashCode(): int equals(Object): boolean Prácticas EDI - © Juan Ramón Pérez

La búsqueda de objetos cuando hay colisiones hashCode()%B54 Fran HashMap hm= new HashMap(); Repartidor rep1= new Repartidor(“Pepe”); Mercancia m1= new Mercancia(“Paquete fragil”); Repartidor rep2= new Repartidor(“Fran”); Mercancia m5= new Mercancia(“Sobre documentos”); hm.put(rep1,m1); hm.put(rep2,m5); Repartidor rep= new Repartidor(“Fran”); Mercancia m= hm.get(rep); hashCode()%B54 Paquete frágil Pepe 54 hashCode()%B54 Sobre docum. Fran 97 Prácticas EDI - © Juan Ramón Pérez

Implementación de nuestra tabla hash Crear una tabla hash abierta genérica. Tamaño de la tabla debe de ser un número primo. Función de dispersión basada en las poténcias de 32 y optimizada con la regla de Horner  incluida en el método hashCode() de los elementos que insertamos. Gestión de colisiones mediante listas de elementos. Que permita borrar los elementos. Prácticas EDI - © Juan Ramón Pérez

Tabla hash final TablaHash tabla[]: Lista; B: entero Utiliza el hashcode() de la clave del elemento que insertamos y le aplica el módulo de B En cada posición de la tabla hay una lista con todos los elementos que colisionaron TablaHash tabla[]: Lista; B: entero -calcularDispersion(Object clave): int Contenedor Pasamos ya como parámetros separados la clave y el elemento elemento: Object clave: String create(entero tam) insertar(String clave, Object obj); buscar(String clave): Object; borrar(String clave): boolean; toString(): String [...] create() Clase contenedor, además del elemento guardamos la clave Prácticas EDI - © Juan Ramón Pérez

Tareas Mejorar los métodos insertar y buscar para gestionar colisiones: Función de dispersión basada en hashCode() análoga a Java. Tabla hash abierta Añadir el método de borrar elementos Prácticas EDI - © Juan Ramón Pérez