什么Java数据结构/解决方案最适合这些要求?

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)

  • 为了使线程安全 - 你可以这样做Set s = Collections.synchronizedSet(new LinkedHashSet(...)); (3认同)