elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Consulta sobre los map JAVA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta sobre los map JAVA  (Leído 3,744 veces)
Pablo Videla


Desconectado Desconectado

Mensajes: 2.274



Ver Perfil WWW
Consulta sobre los map JAVA
« en: 18 Enero 2012, 19:35 pm »

La cosa es que tengo el siguiente metodo en java
Código
  1.  public String getJson() throws JSONException {
  2.  
  3.        JSONArray eventos = new JSONArray();
  4.        Date fecha = new Date();
  5.        JSONObject json = new JSONObject();
  6.    //    JSONObject jsondos = new JSONObject();
  7.        json.put("title", "prueba desde MB 1");
  8.        json.put("start", fecha.toGMTString());//"2012"+"-"+fecha.getMonth()+1+"-"+fecha.getDay()+1
  9.  
  10.        eventos.put(json);
  11.  
  12.        json.clearAll();
  13.  
  14.        json.put("title", "Otro objeto");
  15.        json.put("start", fecha.toGMTString());
  16.        eventos.put(json);
  17.      //  json.clearAll();
  18.        System.out.println("Desde JSON : " + eventos.toString());
  19.  
  20.        return eventos.toString();
  21.    }

La pregunta es porque al borrar todo del map no lo ingresa al otro map siendo que lo ingrese primero y despues elimine los objetos del primer map, no debio haberlos guardado primero y despues eliminado, pero no pasa esto, se borran todos.

Si lo hago con un ArrayList, estoy seguro que funcionaría pero mi pregunta es, porque no funciona con un map?


En línea

Proteus1989

Desconectado Desconectado

Mensajes: 184



Ver Perfil WWW
Re: Consulta sobre los map JAVA
« Respuesta #1 en: 19 Enero 2012, 00:48 am »

No se exactamente lo que preguntas pero lo que he visto es que el objeto json que insertas en evento es el mismo 2 veces.
Recuerda que java es todo dinámico. Lo que estás pasandole a eventos cuando haces eventos.put(json) es lo un puntero al objeto.

No se si esa era tu duda porque la verdad es que no se cual es el map en ese código... No se como funcionará internamente JSONArray.


En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.274



Ver Perfil WWW
Re: Consulta sobre los map JAVA
« Respuesta #2 en: 19 Enero 2012, 14:56 pm »

No se exactamente lo que preguntas pero lo que he visto es que el objeto json que insertas en evento es el mismo 2 veces.
Recuerda que java es todo dinámico. Lo que estás pasandole a eventos cuando haces eventos.put(json) es lo un puntero al objeto.

No se si esa era tu duda porque la verdad es que no se cual es el map en ese código... No se como funcionará internamente JSONArray.

Mi pregunta es porque al insertar el objeto ya creado y despues lo elimino despues de insertar, se borra completamente en donde lo inserte.

Debio haberse borrado solo el primer objeto, no donde lo inserte nuevamente.
En línea

Proteus1989

Desconectado Desconectado

Mensajes: 184



Ver Perfil WWW
Re: Consulta sobre los map JAVA
« Respuesta #3 en: 19 Enero 2012, 15:32 pm »

Pues eso es exactamente lo que te he explicado antes. En java TODO ES DINAMICO y funciona con punteros.

Cuando te creas el json te creas una zona de memoria referenciada por un puntero (llamado json). Cuando tu haces eventos.put(json) no haces una copia de esa memoria y se guarda dentro de eventos, sino que eventos lo único que guarda es el puntero que apunta a esa zona de memoria que creastes en un principio. Por eso cuando haces el json.clearAll() afecta directamente al eventos.

Lo que en realidad estás haciendo es guardar dos punteros que apuntan a la misma zona de memoria.
Para arreglarlo en lugar de json.clearAll(); haz un json = new JSONObject();


Saludos y lo siento si no me he explicado bien
En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.274



Ver Perfil WWW
Re: Consulta sobre los map JAVA
« Respuesta #4 en: 19 Enero 2012, 15:57 pm »

Pues eso es exactamente lo que te he explicado antes. En java TODO ES DINAMICO y funciona con punteros.

Cuando te creas el json te creas una zona de memoria referenciada por un puntero (llamado json). Cuando tu haces eventos.put(json) no haces una copia de esa memoria y se guarda dentro de eventos, sino que eventos lo único que guarda es el puntero que apunta a esa zona de memoria que creastes en un principio. Por eso cuando haces el json.clearAll() afecta directamente al eventos.

Lo que en realidad estás haciendo es guardar dos punteros que apuntan a la misma zona de memoria.
Para arreglarlo en lugar de json.clearAll(); haz un json = new JSONObject();


Saludos y lo siento si no me he explicado bien

De hecho asi lo habìa solucionado, te explicaste a la perfección gracias por tu respuesta, no encontre otra solucion xD
Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consulta MySQL y JAVA
Java
luisalb 6 16,420 Último mensaje 28 Octubre 2008, 04:07 am
por luisalb
Java + Mysql consulta lenta
Java
rigoxls 3 6,715 Último mensaje 16 Agosto 2009, 03:35 am
por rigoxls
Documento de consulta Java en español
Java
axiul13 1 2,454 Último mensaje 31 Marzo 2012, 19:32 pm
por sapito169
consulta sql en java
Java
R/G 1 2,009 Último mensaje 24 Octubre 2014, 16:29 pm
por R/G
Consulta sobre posibles alternativas a Java Web Start
Java
AlbertoGLR 7 4,230 Último mensaje 11 Febrero 2015, 18:19 pm
por Usuario Invitado
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines