如果我有一个始终在更新的 ConcurrentHashMap(添加更多或获取条目..有时可能为空)...
是否有任何有效的方法可以在恒定时间内随机从中获取值?
最佳答案
似乎没有办法获得键或条目的随机访问 View ,而无需在其内部的某个地方制作 O(n) 副本。不过,复制速度可能会非常快;在知道这是一个问题之前不要进行优化。
我能想到的唯一选择是与 map 并行保留条目列表。每当您添加到 map 时,也会添加到列表中。任何时候你从一个地方移除,也要从另一个地方移除。您可以将其包装在您自己的 Map
实现中:
public class RandomAccessConcurrentHashMap<K,V> implements Map<K,V> {
private List<K> backingList = new ArrayList();
private Map<K,V> backingMap = new ConcurrentHashMap<>();
public V put(K key, V value) {
backingList.add(value);
return backingMap.put(key,value);
}
...
}
(原则上 - 您需要考虑线程安全,并且可能会找到比 ArrayList 更有效的存储)
关于java - 有没有什么有效的方法可以从动态更新的java ConcurrentHashMap中获取随机值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44151235/