Так что мой вопрос, вероятно, немного базовый и немного излишний. Но я хочу спросить, более ли эффективно использовать один и тот же метод получения 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();
Да, я знаю, но речь идет о принципе, весь код не будет работать так здорово :D
containsKey/get выполняет два поиска по хешу, это можно преобразовать в get с помощью null checkЯ бы сохранил во временную переменную, если вы хотите сделать с ней несколько операций. Если нет, то просто сделайте одну операцию с get()
Почти наверняка в каждой распространенной ситуации будет быстрее сохранить ссылку и использовать ее повторно, чем get один и тот же ключ снова и снова. На самом деле быстрее get и проверить null, чем вызывать containsKey, за которым следует get. Но, как и во всех этих вещах, не верьте на слово случайному интернет-пользователю - тест тест тест!!




Быстрый ответ: получите свой экземпляр один раз, а затем работайте с ним, это будет быстрее и чище для чтения. Когда вы попадаете в хэш-карту, внутри она выполняет поиск, jvm может обнаружить или не обнаружить, что его можно оптимизировать. Но поскольку вы не уверены, просто
Object instance = map.get(key);
if (instance != null {
instance.doThis();
instance.doThat();
}
Быстрый и простой ответ. Спасибо :D
спасибо... кроме того, тестирование map.get(key) not null эквивалентно тесту на map.contains(key), поэтому вы сохраняете вызов, выполняя непосредственно get(key), у вас будет свой экземпляр или null, что означает, что он ничего не нашел
"jvm может обнаружить, а может и не обнаружить, что его можно оптимизировать" - это ни при каких условиях не оптимизирует.Optional тоже с упоминанием.
stringCounter.get(name).add();выдастNullPointerException, так что вам стоит сначала побеспокоиться об этом.