Java >> Java Program >  >> Java

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> .


Java-tagg