Lägg ett värde i kartan i Java *utan* att uppdatera befintligt värde om det finns
Om du förväntar dig att infoga nya element en stor majoritet av tiden.
ValType temp = map.put(key, val);
if(temp != null)
map.put(key, temp);
Jag tror inte att det är en bra idé i allmänhet, men det är värt att överväga om du kan resonera tillräckligt om ditt användningsfall.
En andra tanke på detta om du kan använda en viss kartimplementering istället för bara kartgränssnittet kan du göra detta med en NavigableMap
Map sub = map.subMap(key, true, key, true);
if (!sub.contains(key)) {
sub.put(key, val);
}
Eftersom underträdet kommer att vara 0 eller 1 noder stort finns inget upprepat arbete.
Om du har en ConcurrentMap<K, V>
det finns metoden putIfAbsent
:
Om den angivna nyckeln inte redan är associerad med ett värde, associera den med det givna värdet. Detta motsvarar
if (!map.containsKey(key))
return map.put(key, value);
else
return map.get(key);
förutom att åtgärden utförs atomärt.
Den här metoden finns dock inte på Map<K, V>
.