Duda con Hashtables en java

Iniciado por GuilleCRS, 21 Febrero 2017, 06:30 AM

0 Miembros y 1 Visitante están viendo este tema.

GuilleCRS

Bueno voy empezando en java y acabo de ver los hashtables , se que se puede buscar mediante una clave  algo en especifico como por ejemplo en el hashtable.get(clave) , pero me surgió la duda ,en un ht como hashtable.put(Integer,Object) se pueden buscar los datos contenidos en esa hashtable pero poniendo como referencia alguna variable que contenga ese objeto?

Por ejemplo crear un objeto llamado persona que contenga nombre , numero y domicilio
y iniciarlo como ht.put(Clave,Persona)
Pero al llamarlo en vez de buscarlo con ht.get(clave) , poderlo buscar con algun dato contenido en el objeto, como el nombre?

Gracias  ;D

ivancea96

La utilidad de la HashTable es esa, un conjunto de keys que no se repetirán y valores asociados a ellas. Los valores no van a ser comparados, no es la finalidad.

Para lo que buscas, tal vez prefieras crear una lista y buscar manualmente tú (o buscar manualmente en el HashTable directamente)

La respuesta rápida: no, no podrás buscar de forma "automática" por un campo del valor almacenado.

Eleкtro

#2
Hola.

El propósito de una estructura de datos de un tipo HasTable en un lenguaje OOP se caracteriza por ser representado como una colección de pares de llaves y valores ( [key, value] ), donde las llaves actuan como un tipo diccionario, es decir, sin la posibilidad de contener elementos duplicados... cosa que ya te han explicado más arriba.

No puedes intentar especificar el valor de una llave en el indexer de un HashTable ( myHashTable[value] ), eso no tiene sentido, pues los valores pueden repetirse y esto impediría que existiese la eficencia necesaria para asegurar que se devuelva un único elemento (par de llave y valor) al usar el indexer de este tipo de colección. Lo que si puedes hacer es iterar las llaves de la colección y así evaluar por ti mismo de forma "manual" los valores de cada llave, eso te debería servir para solucionar el problema, o también podrías hacer lo siguiente, en caso de que Java permita hacerlo, heredar la clase de un HashTable para implementar una nueva sobrecarga del indexer al que puedas pasarle el tipo de valor que tú quieras (no me preguntes como hacer esto en Java, ni idea).

¡Saludos!