现有的 ConcurrentSkipListSet 将是理想的,如果它是一个列表而不是一个集合。
所以SkipList 数据结构的核心是一个链表。如果您担心顺序以及轻松有序地遍历它的能力,那么 SkipList 也可以很好地工作。它也是平衡树的概率替代方案,这就是为什么它也可以是 aSet
或 a Map
。内存中的数据结构如下所示:
引用 Javadocs:
此类实现 SkipLists 的并发变体,为 containsKey、get、put 和 remove 操作及其变体提供预期的平均 log(n) 时间成本。插入、删除、更新和访问操作由多个线程安全地并发执行。迭代器是弱一致的,返回的元素反映了在迭代器创建时或之后的某个时刻映射的状态。它们不会抛出 ConcurrentModificationException,并且可以与其他操作同时进行。升序键排序视图及其迭代器比降序视图更快。
如果您更多地解释您想要的功能List
,我可以更好地回答是否ConcurrentSkipListSet
能够工作。
编辑:
啊,我明白了。在评论中来回一些之后,您似乎需要能够将两个等效的对象粘贴到不可能的对象中Set
。我们得出的结论是永远不会compareTo(...)
返回 0。这有点小技巧,但使用AtomicLong
为每个对象生成一个唯一的数字,然后您可以在真正的比较字段(在本例中为数值超时值)相等时比较这些数字. 这将允许将具有相同字段的对象插入到 中,Set
并根据该字段保持正确的顺序。