我需要一个非常快速的(插入,删除,包含)高度并发的列表,可以使用比较器/可比较器对其进行排序。
如果现有的ConcurrentSkipListSet是一个列表而不是一个集合,则将是理想的。我需要在数据结构中插入多个相等的项。
我目前正在考虑使用LinkedDeque,如果找不到更好的方法,但是该结构比争用高时的跳过列表要慢得多。
有什么建议么?
编辑:最低限度,我实际需要的是使用compareTo进行排序的东西,可以同时插入并可以使用对象标识删除/获取项目。注释中提到的所有其他并行要求仍然适用。
最佳答案
因此,SkipList data-structure的核心是一个链表。如果您担心订单以及轻松轻松地遍历订单的能力,SkipList也将很好地工作。这也是平衡树的概率替代方案,这就是为什么它也可以是Set
或Map
的原因。内存中的数据结构如下所示:
引用Javadocs:
如果您更多地解释了List
想要的功能,那么我可以更好地回答ConcurrentSkipListSet
是否可以工作。
编辑:
啊,我明白了。在评论中来回反复后,似乎您需要能够将两个等效的对象粘贴到Set
中,这是不可能的。我们得出的结论是compareTo(...)
永远不会返回0。这有点麻烦,但是使用AtomicLong
为每个对象生成一个唯一的数字,然后您可以在真正的比较字段中对这些数字进行比较(在这种情况下为数字超时值)是平等的。这将允许将具有相同字段的对象插入Set
并根据该字段以正确的顺序进行保存。