java - leer - org.json.jsonarray jar
Java HashMap vs JSONObject (4)
JSONObject no tiene demasiada sobrecarga adicional sobre un HashMap. Si está de acuerdo con usar un HashMap, entonces debería estar de acuerdo con usar un JSONObject. Esto se proporciona si desea generar JSON.
JSONObject verifica la validez de los valores que está almacenando como parte de su JSONObject, para asegurarse de que cumpla con la especificación JSON. Por ejemplo, los valores de NaN no forman parte de JSON válido. Aparte de esto, JSONObject puede generar cadenas json (regular | prettfied). Esas cadenas pueden ser bastante grandes, dependiendo de la cantidad de JSON. Además, JSONObject usa StringBuffer, por lo que una de las muchas cosas que haría sería reemplazar todas las apariciones de StringBuffer con StringBuilder.
JSONObject (de org.json) es una de las bibliotecas JSON simples que puede usar. Si quieres algo muy eficiente, usa algo como Jackson.
Me pregunto sobre el rendimiento de Java HashMap vs JSONObject.
Parece que JSONObject almacena datos internamente utilizando HashMap. Pero JSONObject podría tener una sobrecarga adicional en comparación con HashMap.
¿Alguien sabe sobre el rendimiento de Java JSONObject en comparación con HashMap?
¡Gracias!
Las respuestas existentes son correctas, las diferencias de rendimiento entre los dos son insignificantes.
Ambos son básicamente métodos bastante ineficientes para almacenar y manipular datos. El método más eficiente suele ser enlazar objetos Java regulares, que usan menos memoria y son más rápidos de acceder. Muchos desarrolladores utilizan la biblioteca simple (primitiva) de org.json porque es conocida, pero es posible que sea la alternativa menos conveniente y eficiente disponible. Las opciones como Jackson y Gson son grandes mejoras, así que vale la pena considerar su uso.
Yo diría que la pregunta no tiene sentido por varias razones:
- Comparando manzanas con naranjas: HashMap y JSONObject están diseñados para 2 propósitos completamente diferentes. Es como preguntar "es la clase Persona o Clase de empresa más eficiente para almacenar un objeto PhoneNumber". Usa lo que tenga sentido.
- Si está convirtiendo a / desde JSON, es probable que esté enviando los datos a un lugar lejano (como el navegador de un usuario). El tiempo que se tarda en enviar estos datos a través de la red y evaluarlos en el navegador del usuario (es probable) eclipsará en gran medida cualquier diferencia de rendimiento al rellenar un Hashmap o JSONObject.
- Hay más de 1 implementación "JSONObject" flotando por ahí.
- Finalmente, no has preguntado qué tipo de rendimiento te gustaría medir. ¿Qué planeas hacer con estas clases?
Como dijiste, JSONObject
está respaldado por un HashMap
.
Debido a esto, el rendimiento será casi idéntico. JSONObject.get()
agrega una comprobación nula y lanzará una excepción si no se encuentra una clave. JSONObject.put()
solo llama a map.put()
.
Por lo tanto, casi no hay gastos generales. Si está tratando con objetos JSON, siempre debe usar JSONObject
sobre HashMap
.