Эффективность Java Метод получения Hashmap

Так что мой вопрос, вероятно, немного базовый и немного излишний. Но я хочу спросить, более ли эффективно использовать один и тот же метод получения Hashmap несколько раз. Или указать объект на один из методов get и затем работать с этим временным объектом. Я написал немного кода, чтобы визуализировать это.

    HashMap<String, MyClass> stringCounter = new HashMap<>();
    stringCounter.put(..., ...); // ...

    if (stringCounter.containsKey(name)) stringCounter.get(name).remove();
    else stringCounter.get(name).add();

    MyClass myClass = stringCounter.get(name);
    if (stringCounter.get(otherName).remove) myClass.remove();
    else myClass.add();
stringCounter.get(name).add(); выдаст NullPointerException, так что вам стоит сначала побеспокоиться об этом.
Jacob G. 25.05.2019 22:48

Да, я знаю, но речь идет о принципе, весь код не будет работать так здорово :D

undefinedhuman 25.05.2019 22:49
containsKey/get выполняет два поиска по хешу, это можно преобразовать в get с помощью null check
Eugene 25.05.2019 22:50

Я бы сохранил во временную переменную, если вы хотите сделать с ней несколько операций. Если нет, то просто сделайте одну операцию с get()

ealeon 25.05.2019 22:51

Почти наверняка в каждой распространенной ситуации будет быстрее сохранить ссылку и использовать ее повторно, чем get один и тот же ключ снова и снова. На самом деле быстрее get и проверить null, чем вызывать containsKey, за которым следует get. Но, как и во всех этих вещах, не верьте на слово случайному интернет-пользователю - тест тест тест!!

Boris the Spider 25.05.2019 22:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Быстрый ответ: получите свой экземпляр один раз, а затем работайте с ним, это будет быстрее и чище для чтения. Когда вы попадаете в хэш-карту, внутри она выполняет поиск, jvm может обнаружить или не обнаружить, что его можно оптимизировать. Но поскольку вы не уверены, просто

Object instance = map.get(key);
if (instance != null {
    instance.doThis();
    instance.doThat();
}

Быстрый и простой ответ. Спасибо :D

undefinedhuman 25.05.2019 22:50

спасибо... кроме того, тестирование map.get(key) not null эквивалентно тесту на map.contains(key), поэтому вы сохраняете вызов, выполняя непосредственно get(key), у вас будет свой экземпляр или null, что означает, что он ничего не нашел

Damien MIRAS 25.05.2019 22:53

"jvm может обнаружить, а может и не обнаружить, что его можно оптимизировать" - это ни при каких условиях не оптимизирует.Optional тоже с упоминанием.

Boris the Spider 25.05.2019 22:53

Другие вопросы по теме