Consulta sobre los map JAVA

Iniciado por Pablo Videla, 18 Enero 2012, 19:35 PM

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

Pablo Videla

La cosa es que tengo el siguiente metodo en java
Código (java) [Seleccionar]

  public String getJson() throws JSONException {
       
        JSONArray eventos = new JSONArray();
        Date fecha = new Date();
        JSONObject json = new JSONObject();
    //    JSONObject jsondos = new JSONObject();
        json.put("title", "prueba desde MB 1");
        json.put("start", fecha.toGMTString());//"2012"+"-"+fecha.getMonth()+1+"-"+fecha.getDay()+1
       
        eventos.put(json);
           
        json.clearAll();
     
        json.put("title", "Otro objeto");
        json.put("start", fecha.toGMTString());
        eventos.put(json);
      //  json.clearAll();
        System.out.println("Desde JSON : " + eventos.toString());

        return eventos.toString();
    }


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?

Proteus1989

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.

Pablo Videla

Cita de: Proteus1989 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.

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.

Proteus1989

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

Pablo Videla

Cita de: Proteus1989 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

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