【发布时间】:2016-01-18 19:35:06
【问题描述】:
我们有一个返回 HashMap 的接口。
现在由于线程安全,我们已经使用同步我们的地图
Collections.synchronizedMap(new HashMap());
现在使用我们接口的客户端面临类转换异常
Collections.synchronizedMap 返回一个同步映射,并且不能转换为哈希映射
我们必须把这个 synchronizedMap 转换回 hash map
有什么方法可以转换
返回的synchronizedMapCollections.synchronizedMap() 返回哈希映射。
【问题讨论】:
-
他们可以用
new HashMap<>(map)复制它,还是他们想要原件? -
HashMap<...> map = new HashMap<>();随心所欲创建和分发Collections.synchronizedMap(map);,然后,当您需要非同步版本时,只需使用原始map即可。 -
不确定它是否适用于您的情况,但底线是您的界面应该返回
Map,而不是HashMap。你的情况正是Map接口存在的原因。 -
@aioobe 这很危险,因为对于同步映射的任何操作,对 HashMap 的任何访问都不会被排序。即使同步的映射全部是写入,而 HashMap 全部是读取,它仍然是数据竞争。
-
我试过复制,但同步地图没有复制方法。我想我需要使用 putAll 方法
标签: java collections