gpt4 book ai didi

Java:如何拍摄ConcurrentHashMap的静态快照?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:17:21 33 4
gpt4 key购买 nike

Java doc表示方法 values() 和 entrySet() 的返回值由 map 支持。因此对 map 的更改会反射(reflect)在集合中,反之亦然。我不希望这种情况发生在我的静态副本上。本质上,我希望在我的 DS 上完成大量并发操作。但在某些情况下,我想迭代它的静态快照。我想迭代静态快照,因为我假设与同时更新的版本相比,迭代静态快照会更快。

最佳答案

只需复制一份,不会更改。

Set<K> keySetCopy = new HashSet<>(map.keySet());
List<V> valuesCopy = new ArrayList<>(map.values());

所有集合实现都有一个复制构造函数,它将提供的集合的全部数据复制到新创建的集合中,而无需原始集合的支持。

注意:这不适用于 entrySet(),因为实际的 map 条目仍将“属于”原始 map ,并且对原始条目的更改将反射(reflect)在您的副本中。如果您需要 entrySet(),您应该先使用相同的技术复制整个 Map。

Set<Entry<K,V>> entrySetCopy = new HashMap<>(map).entrySet();

请注意,所有这些都需要一次完整的迭代(在构造函数中),然后才会是静态快照。据我所知,没有办法绕过这个限制。

关于Java:如何拍摄ConcurrentHashMap的静态快照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37782319/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com