A
ConcurrentHashMap
is a thread-safe version of a HashMap that allows concurrent read and thread-safe update operations.
The compute()
method uses the mapping function provided as an argument to compute a new value for the specified key.
If the specified key is not present, then no operation is performed and the method returns null
.
null
is not allowed as a key or value.
The ConcurrentHashMap
object, which uses HashMap
internally, is divided into multiple portions according to the concurrency level. During an update operation, only a specific portion of the map is locked instead of the whole map.
Since it doesn’t lock the whole map, there may be a chance of a read operation (like
get()
) overlapping with an update operation (likeput()
andremove()
). In such a case, the result of the read operation will reflect the most recently completed update operation.
Read more about ConcurrentHashMap
here.
public V compute(K key, BiFunction remappingFunction)
key
: The key for which the new value is to be computed.
remappingFunction
:
BiFunction
that takes two arguments as input and returns a single value.BiFunction
will be updated as the value of the passed key of the map.null
from BiFunction
, then the mapping for the key will be removed.The compute()
method returns the new value associated with the key.
The code below demonstrates how to use the compute()
method.
import java.util.concurrent.ConcurrentHashMap;class Compute {public static void main( String args[] ) {ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();map.put("Maths", 50);map.put("Science", 60);map.put("Programming", 70);System.out.println( "The map is - " + map);System.out.println( "\nCalling compute function for key Maths");Integer newVal = map.compute("Maths", (key, oldVal) -> { return oldVal + 10; });System.out.println("\nThe return value is " + newVal);System.out.println( "The map is - " + map);System.out.println( "\n---------------\n");System.out.println( "Calling compute function for key Economics\n");newVal =map.compute("Economics",(key, oldVal) -> {System.out.print("Inside BiFunction: The key is ");System.out.print(key);System.out.print(". The value is ");System.out.println(oldVal + ".");if(oldVal != null) {return oldVal + 10;}return null;});System.out.println("\nThe return value is " + newVal);System.out.println( "The map is - " + map);}}
In line 5, we create a ConcurrentHashMap
named map
.
In lines 6-8, we add entries to the map.
In line 13, we call the compute()
method on the map
for the Maths
key.
The code will compute a new value inside the
BiFunction
and update the value associated with theMaths
key.
Line 20 calls the compute()
method on the map
for the Economics
key.
Economics
key, so the map remains unchanged and returns null
.