Подтвердить что ты не робот

Java HashMap против JSONObject

Мне интересно узнать о производительности Java HashMap и JSONObject.

Кажется, JSONObject хранит данные внутренне с помощью HashMap. Но JSONObject может иметь дополнительные накладные расходы по сравнению с HashMap.

Знает ли кто-нибудь о производительности Java JSONObject по сравнению с HashMap?

Спасибо!

4b9b3361

Ответ 1

Как вы сказали, JSONObject поддерживается HashMap.

Из-за этого производительность будет почти одинаковой. JSONObject.get() добавляет нулевую проверку и генерирует исключение, если ключ не найден. JSONObject.put() просто вызывает map.put().

Итак, накладных расходов почти нет. Если вы имеете дело с объектами JSON, вы должны всегда использовать JSONObject над HashMap.

Ответ 2

Я бы сказал, что вопрос не имеет смысла по нескольким причинам:

  • Сравнение яблок с апельсинами: HashMap и JSONObject предназначены для 2 совершенно разных целей. Это, как просить, "класс Person или класс компании более эффективен для хранения объекта PhoneNumber". Используйте то, что имеет смысл.
  • Если вы конвертируете в/из JSON, вы, скорее всего, отправляете данные в отдаленное место (например, в браузер пользователя). Время, затраченное на отправку этих данных по сети и их оценку в пользовательском браузере, вероятно, затмевает любые различия в производительности при заполнении Hashmap или JSONObject.
  • Существует более 1 реализация "JSONObject", плавающая вокруг.
  • Наконец, вы не спрашивали, какую производительность вы хотели бы измерить. Что вы на самом деле планируете делать с этими классами?

Ответ 3

Существующие ответы правильные, различия в производительности между ними незначительны.

Оба являются в основном довольно неэффективными методами хранения и обработки данных. Более эффективный метод обычно связывается с обычными объектами Java, которые используют меньше памяти и быстрее получают доступ. Многие разработчики используют простую (примитивную) библиотеку org.json, потому что она хорошо известна, но возможно наименее удобная и эффективная альтернатива. Такие варианты, как Jackson и Gson, являются большими улучшениями, поэтому стоит подумать над их использованием.

Ответ 4

JSONObject не имеет слишком много дополнительных накладных расходов поверх HashMap. Если вы используете HashMap, вы должны быть в порядке, используя JSONObject. Это обеспечивается тем, что вы хотите создать JSON.

JSONObject проверяет правильность значений, которые вы храните как часть вашего JSONObject, чтобы убедиться, что он соответствует спецификации JSON. Напр. Значения NaN не составляют часть действительного JSON. Кроме того, JSONObject может генерировать строки json (обычный | prettfied). Эти строки могут стать довольно большими, в зависимости от количества JSON. Кроме того, JSONObject использует StringBuffer, поэтому одна из многих вещей, которые я бы сделал, это заменить все вхождения StringBuffer на StringBuilder.

JSONObject (от org.json) - одна из простых библиотек JSON, которые вы можете использовать. Если вы хотите что-то очень эффективное, используйте что-то вроде Джексона.

Ответ 5

Единственное снижение производительности связано с приведением данных! Когда вы JSONObject сохраняете данные об объекте HashMap, он приводит нужный вам тип данных.