Я использую Java ConcurrentMap для карты, которую можно использовать из нескольких потоков. PutIfAbsent - отличный метод, который намного проще читать / писать, чем стандартные операции с картой. У меня есть код, который выглядит следующим образом:
ConcurrentMap<String, Set<X>> map = new ConcurrentHashMap<String, Set<X>>();
// ...
map.putIfAbsent(name, new HashSet<X>());
map.get(name).add(Y);
С точки зрения читабельности, это здорово, но требует создания нового HashSet каждый раз, даже если он уже есть на карте Я мог бы написать это:
if (!map.containsKey(name)) {
map.putIfAbsent(name, new HashSet<X>());
}
map.get(name).add(Y);
С этим изменением оно теряет читабельность, но не требует каждый раз создавать HashSet. Что лучше в этом случае? Я склоняюсь на сторону первого, так как он более читабелен. Второй будет лучше и может быть более правильным. Может быть, есть лучший способ сделать это, чем любой из них.
Как лучше всего использовать метод putIfAbsent таким образом?