複数のスレッドから使用できるマップに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を作成する必要はありません。この場合、どちらが良いですか?私はそれがより読みやすいので最初のものを支持する傾向があります。2つ目はパフォーマンスが向上し、より正確になる可能性があります。たぶん、これらのどちらよりもこれを行うためのより良い方法があります。
この方法でputIfAbsentを使用するためのベストプラクティスは何ですか?