Foros del Web » Programación para mayores de 30 ;) » Java »

Guardar y recuperar objetos en un HASHMAP

Estas en el tema de Guardar y recuperar objetos en un HASHMAP en el foro de Java en Foros del Web. Hola amigos , tengo un problema ,, estoy tratando de crear objetos de tipo moneda como verán en el codigo que voy a dejar , ...
  #1 (permalink)  
Antiguo 12/11/2009, 08:32
 
Fecha de Ingreso: noviembre-2003
Mensajes: 267
Antigüedad: 20 años, 5 meses
Puntos: 4
Guardar y recuperar objetos en un HASHMAP

Hola amigos , tengo un problema ,, estoy tratando de crear objetos de tipo moneda como verán en el codigo que voy a dejar , las guardo en un HASHMAP aparentemente sin problema por lo que puedo ver,,,
El problema esta a la hora de recuperar alguno de los campos de ese objeto,
es decir busco en el hash por la key y no logro ver los valores del objero, no su nombre , ni nada,,
seguramente es por que no se como procesarlo de manera correcta,
si alquien me ayuda se lo agradeceré,,,,,,


Código PHP:
//  CREAR OBJETOS MONEDAS
//int id, String nombre, String simbolo, double tc
Monedas moneda = new Monedas("Peso","$");
System.out.println(moneda.getNombre());
///   parte del HashMAP
HashMap hashMap = new HashMap();
hashMap.put("$U",moneda);
hashMap.put("$","valor2");
hashMap.put("U$S","valor3");



Iterator it hashMap.entrySet().iterator();
while (
it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
System.out.println(e.getKey() + " " e.getValue());
}

 
System.out.println("hashMap contiene " hashMap.size() + " llaves y valores");
 
System.out.println(hashMap.get("$U").getClass());
   }

el codigo de la clase comeda es
Código PHP:
    public class Monedas {
    private 
int id;
    private 
String nombre;
    private  
double tc
Muchas Gracias
  #2 (permalink)  
Antiguo 12/11/2009, 08:59
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 3
Mensaje Respuesta: Guardar y recuperar objetos en un HASHMAP

Creo que el problema viene al estar guardando Objetos que tu has creado dentro de un hashmap te pongo un ejemplo de como hacerlo para que te recupere bien:

Primero tienes que decidir cual va a ser la clave que usaras en el hashmap que identifique tu objeto, en este caso yo te recomendaria el int id del objeto Moneda

Luego cuando lo insertas lo harias de la siguiente forma:

hashmap.put(moneda.getId(),moneda); (estoy suponiendo que tienes definido el metodo getId();

Ahora para que la llamada hashmap.get(clave) te funcione bien debes sobreescribir el metodo equals que Moneda hereda de Object, en el caso que te propongo valdria con:

Código PHP:
public class Moneda {
    private 
int id;
    private 
String nombre;
    private  
double tc;  

  public 
boolean equals(Object o){
  
Moneda mon1 = (Moneda)o;
   if(
mon1.getId()==this.id){
       
//si tienen el mismo ID es que son el mismo objeto
       
return true;
   }
    return 
false;
   }

Con esto creo que es suficiente y empezara a funcionarte bien el metodo put y get de hashmap.

Espero haberte podido ayudar
  #3 (permalink)  
Antiguo 12/11/2009, 09:32
 
Fecha de Ingreso: noviembre-2003
Mensajes: 267
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Guardar y recuperar objetos en un HASHMAP

Hola amigo, gracias por tu pronta respuesta, pero sabes que hice los cambios que me aconsejasteis, pero me sigue devolviendo cuando consulto por

Código PHP:
System.out.println(hashMap.get(1)); 
me sigue regresando
Código PHP:
proyectofinal.Monedas@19821f 
como consulto para ver el nombre de esa moneda ???????
Yo creo que debería de haber algo parecido a esto
(hashMap.get(1).values(nombre)); ( lo acabo de inventar)

Muchas gracias.....
  #4 (permalink)  
Antiguo 12/11/2009, 09:51
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Guardar y recuperar objetos en un HASHMAP

Wenas


Es sencillo, System.out.println recibe un String como parametro. Como le estas pasando un objeto moneda, lo que se hace implicitamente, es transformarlo a String, para ello java busca el metodo toString().

Como tu clase Moneda no implmenta el metodo toString() ira hasta el padre, y empezara a recorrer todo el arbol de herencia, hasta que lo encuentre.

Si no lo encuentra, cosa que parece, usara el metodo toString() de la clase de clases, usease, Object.

Eso es lo que te esta devolviendo.

Por lo tanto, debes implementar el metodo toString() en tu clase Moneda.

Código:
public String toString()
{
   return "soy una linda monedita, tralaralarita";
}
Saludos.
  #5 (permalink)  
Antiguo 12/11/2009, 10:37
 
Fecha de Ingreso: noviembre-2003
Mensajes: 267
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Guardar y recuperar objetos en un HASHMAP

Lo que me dijiste funciona perfecto , gracias , pero pasa un solo valor ,,,
es decir si en lo que me pasaste coloco ,,,

Código PHP:
return  this.nombre
pero yo quiero todos los datos, de ese objeto ,, como puedo saberlos ,,, a lo mejor sin usarar el system out ,,,
podria igualar el objeto actual de hashmap a un contenedor de ese mismo tipo ?????

un abrazo y espero me respondan gracias,,
  #6 (permalink)  
Antiguo 12/11/2009, 10:50
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Guardar y recuperar objetos en un HASHMAP

Por dios.

Código:
return "nombre=" + this.nombre +"\n" 
+ "id=" + this.id + ....
Saludos.
  #7 (permalink)  
Antiguo 13/11/2009, 03:48
 
Fecha de Ingreso: enero-2009
Mensajes: 43
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Guardar y recuperar objetos en un HASHMAP

Hola!

Yo tengo otra duda respecto a los hashmap.

¿Puedo poner un tipo de clase como objeto?

Me explico, lo que quiero hacer es que pasandole una key me devuelva un tipo de clase, es decir:
- si la key es 0 --> q me devuelva miClase0.class
- si la key es 1 --> q me devuelva miClase1.class

y asi sucesivamente. Creo que si, pero despues de devolverme el tipo de clase no consigo crear el objeto de esa clase.

Si alguien conoce alguna pagina o lugar con ejemplos de lo que busco, por favor, soy todo oidos!

Muchas gracias y cuidaos !
  #8 (permalink)  
Antiguo 13/11/2009, 04:22
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Guardar y recuperar objetos en un HASHMAP

Un hashmap o hashtable te devolvera el objeto guardado con esa key.

A ese objeto, como a todo Object, le preguntas de que clase es, y ya tienes lo que quieres.

El metodo es getClass().

Saludos
  #9 (permalink)  
Antiguo 13/11/2009, 04:59
 
Fecha de Ingreso: enero-2009
Mensajes: 43
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Guardar y recuperar objetos en un HASHMAP

Gracias elAntoine, pero no es eso. Voy a poner el codigo, que asi se explicara mejor.

Creo el hashmap:

Código:
private final static Map MAPA_TIPO_REG = new HashMap();
	
	static {
		TipoRegistro.MAPA_TIPO_REG.put("00", 	Integer.class);
		TipoRegistro.MAPA_TIPO_REG.put("01", 	Long.class);
		TipoRegistro.MAPA_TIPO_REG.put("02", 	String.class);
       }
Por otra parte, recibo el tipo de registro que tengo que crear, y segun el que sea debo devolver un nuevo objeto de la clase q corresponde a la clave.

Código:
tipo = registro.substring(0, 2);
Class cl = (Class) MAPA_TIPO_REG.get(tipo);
Constructor c = (Constructor) cl.getConstructor(new Class[] {String.class});

return  c.newInstance(new Object[] {registro});
Pero me da un java.lang.NoSuchMethodException, al hacer el getConstructor(new Class[] {String.class}).

tengo que decir que las clases que quiero crear, no son Long o String, son clases creadas por mi, ¿de ahí que no las encuentre?

Espero haberme explicado mejor.

Si alguien sabe algun sitio al que pueda recurrir, me hara un gran favor. Muchas gracias.

Un saludo!
  #10 (permalink)  
Antiguo 13/11/2009, 05:24
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Guardar y recuperar objetos en un HASHMAP

AAAAAAAAAa. Vale.

Tu clase es abstracta o interface??

http://bugs.sun.com/bugdatabase/view...bug_id=4401287
Saludos
  #11 (permalink)  
Antiguo 13/11/2009, 05:34
 
Fecha de Ingreso: enero-2009
Mensajes: 43
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Guardar y recuperar objetos en un HASHMAP

No, ninguna de las clases que estan en el hashmap son abstractas o interfaces, pero todas ellas heredan de otra clase que si es abstracta.

Gracias por el link, ahora le echo un ojo.
  #12 (permalink)  
Antiguo 16/11/2009, 04:04
 
Fecha de Ingreso: enero-2009
Mensajes: 43
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Guardar y recuperar objetos en un HASHMAP

Hola

Sigo necesitando ayuda con lo que plantee. Si alguien tiene idea de lo que quiero hacer, por favor, dadme algun paso a seguir o alguna web a la que recurrir

elAntoine, gracias por el enlace, pero de momento no me ha aclarado mucho, gracias.

Un saludo
  #13 (permalink)  
Antiguo 18/11/2009, 05:00
 
Fecha de Ingreso: enero-2009
Mensajes: 43
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Guardar y recuperar objetos en un HASHMAP

Hola!

Ya lo he solucionadao! por fin!!

Resulta que la clase que queria crear no tenia un metodo constructor bien construido. Una vez corregido me crea la nueva instancia.

La de vueltas que he dado por esta tonteria! seguro que sabeis de que hablo!

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:36.