ConcurrentHashMap - 添加具有相同Key的项目

Tal*_*gel 0 java concurrency

我有一个CuncurrentHasMap:

private static ConcurrentHashMap<String, Object> testParameters =
new ConcurrentHashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)

我推动(有时)具有相同键的对象,这些对象是TreeMap类型的TreeMaps(字符串,MyPrivateClass).

如何更改此put方法,以便将具有相同键的对象放在一起而不被覆盖?

public static void put(String key, Object object) {

        getTestParameters().put(key, object);
}
Run Code Online (Sandbox Code Playgroud)

And*_*ner 6

创建值List<Object>(或其他一些容器/集合类型),而不是Object:

private static ConcurrentHashMap<String, List<Object>> testParameters =
    new ConcurrentHashMap<>();
Run Code Online (Sandbox Code Playgroud)

然后使用compute而不是put创建并添加到列表:

getTestParameters().compute(key, (k, v) -> {
  if (v == null) v = new ArrayList<>();
  v.add(object);
  return v;
});
Run Code Online (Sandbox Code Playgroud)

  • @Oleksandr这不是原子的,所以它不完全相同.你必须将`Collections.synchronizedList(new ArrayList <>())`添加到地图中才能安全地工作. (2认同)