【发布时间】:2011-11-03 02:32:38
【问题描述】:
在以迭代为主的场景中,我需要一个排序列表(与插入/删除相比,根本不是随机获取)。出于这个原因,我考虑使用与树相比的跳过列表(迭代器应该更快)。
问题是java6只有一个跳过列表的并发实现,所以我猜测在非并发场景中使用它是否有意义,或者开销是否使它成为一个错误的决定。
据我所知,ConcurrentSkipList* 基本上是基于 CAS 的无锁实现,因此它们不应该带来(太多)开销,但我想听听其他人的意见。
编辑:
经过一些微基准测试(在不同大小的 TreeSet、LinkedList、ConcurrentSkipList 和 ArrayList 上多次运行迭代)表明存在相当大的开销。 ConcurrentSkipList 确实将元素存储在内部的链表中,因此它在迭代时比 LinkedList 慢的唯一原因是由于上述开销。
【问题讨论】:
标签: java performance data-structures collections concurrency