提问者:小点点

如何在Scala中更新Java并发HashMap


我对ConCurrentHashMap的行为感到困惑。我有一个以Array为值的Long索引的地图。我尝试使用putIfAbsend和computeIfAbsend来填充地图。Scala工作表/控制台确实暗示地图已经更新,但get()总是返回null。见下文

val foo = new ConcurrentHashMap[Long, ConcurrentLinkedQueue[Int]]()

// val initialize = new ConcurrentLinkedQueue[Int]()
// initialize.add(1)
// initialize 

// foo.putIfAbsent(1, initialize)
foo.computeIfAbsent(1, k => new ConcurrentLinkedQueue[Int]()).add(2);

// When I inspect the content of foo, it does show {1=[2]}
foo 

// But get(1) still returns null! 
foo.get(1)

对为什么会这样有任何建议?那么我如何更新并发哈希映射的内容呢?我正在测试没有显式多线程访问。Scala的版本是2.12.8。

非常感谢!


共1个答案

匿名用户

我想通了。在这种情况下,get方法中的键1具有类型“Int”。将其转换为Long解决了问题。

foo.get(1.toLong)