mai*_*rgs 4 java collections concurrency data-structures
我需要一个满足这些要求的java数据结构/解决方案.什么最适合这些?
1)必须保留对象的插入顺序
2)对象必须是唯一的(这些是由UUID唯一标识的数据库对象).
3)如果添加了具有相同ID的较新对象,则应覆盖/删除旧版本的对象
4)许多线程都应该可以访问解决方案.
5)当读取/使用添加到Structure的第一个对象时,应该从数据结构中删除它
har*_*rto 10
这里有几种可能性.最简单的可能是从LinkedHashSet开始.这将为您提供所需的唯一性和可预测的排序.然后,您可以包装结果集以使其成为线程安全的:
Set<T> s = Collections.synchronizedSet(new LinkedHashSet<T>(...));
Run Code Online (Sandbox Code Playgroud)
注意:由于Set没有真正定义从中检索项目的方法,因此您的代码必须手动调用Set.remove(Object).
或者,您可以包装一个LinkedHashMap,它确实为您需要的delete-on-read语义提供了一个钩子:
class DeleteOnReadMap<K, V> implements Map<K, V> {
private Map<K, V> m = new LinkedHashMap<K, V>();
// implement Map "read" methods Map with delete-on-read semantics
public V get(K key) {
// ...
}
// (other read methods here)
// implement remaining Map methods by forwarding to inner Map
public V put(K key, V value) {
return m.put(key, value);
}
// (remaining Map methods here)
}
Run Code Online (Sandbox Code Playgroud)
最后,包装自定义Map的实例以使其具有线程安全性:
Map<K, V> m = Collections.synchronizedMap(new DeleteOnReadMap<K, V>(...));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1826 次 |
| 最近记录: |