我有一个CuncurrentHasMap:
private static ConcurrentHashMap<String, Object> testParameters =
new ConcurrentHashMap<String, Object>();我用相同的键推(有时)对象,这些对象是TreeMaps类型的TreeMap(string,MyPrivateClass)。
如何更改这个put方法,以便将具有相同键的对象放在一起而不被重写?
public static void put(String key, Object object) {
getTestParameters().put(key, object);
}发布于 2018-11-26 13:54:35
正如您在注释中指出的,新的TreeMap类型值应该是合并的和现有的,您可以重写字段和put方法,如下所示:
private static final Map<String, Map<String, MyPrivateClass>> testParameters = new ConcurrentHashMap<>();
public static void put(String key, TreeMap<String, MyPrivateClass> value) {
testParameters.compute(key, (k,v) -> {
if(null == v) {
v = Collections.synchronizedMap(new TreeMap<>(value.comparator()));
}
v.putAll(value);
return v;
}
);
}ConcurrentHashMap的使用表明您将从多个线程并发访问映射,这就是为什么我添加了Collections.synchronizedMap(),因为您可能还希望对结果的TreeMaps并发执行读取。
更新:在仍然维护TreeMaps条目的同时,我从computeIfAbsent切换到compute,就像AndyTurner在他的回答中所做的那样,因为我以前的方法不是原子的。
https://stackoverflow.com/questions/53480488
复制相似问题