Foro de elhacker.net

Programación => Java => Mensaje iniciado por: GuilleCRS en 21 Febrero 2017, 06:30 am



Título: Duda con Hashtables en java
Publicado por: GuilleCRS en 21 Febrero 2017, 06:30 am
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


Título: Re: Duda con Hashtables en java
Publicado por: ivancea96 en 22 Febrero 2017, 09:30 am
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.


Título: Re: Duda con Hashtables en java
Publicado por: Eleкtro en 22 Febrero 2017, 09:59 am
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!