Java8 представила эти хорошие методы getOrDefault()
и putIfAbsent()
, позволяющие писать код вроде:
Map<Foo, List<Bar>> itemsByFoo = ...
List<Bar> bars = itemsByFoo.getOrDefault(key, new ArrayList<>());
bars.add(someNewBar);
Теперь мне интересно, есть ли хорошие фактические причины:
itemsByFoo.put(key, bars);
или
itemsByFoo.putIfAbsent(key, bars);
Оба будут работать:
- вариант 1 может сделать много ненужных "помеченных" вызовов при частом добавлении элементов в списки
- option2 может сделать много ненужных вызовов "containsKey", когда добавление новых записей для новых ключей является доминирующим.
SO: это хорошие причины для выбора варианта 1 или варианта 2 "всегда"?