当需要一个不可变列表并且需要最快的访问/更新时,您会使用什么?如果您需要从中间访问元素,LinkedList 可能会很慢,并且创建和重新填充它是禁止的。二叉树?四叉树?
当需要一个不可变列表并且需要最快的访问/更新时,您会使用什么?如果您需要从中间访问元素,LinkedList 可能会很慢,并且创建和重新填充它是禁止的。二叉树?四叉树?
我不确定我理解你在寻找什么,但我会尝试根据一些标准类中看到的东西给出一些指针:
CopyOnWriteArrayList是一个可变的线程安全列表,因为它在更新时会复制内部数组。也许你可以从中借鉴一些想法,尽管对于大型列表来说显然不太高效。
ConcurrentHashMap在更复杂的结构上实现了类似的思路。它将内部哈希表分成单独的分区,这样只需要锁定相关分区的访问即可进行更改。
对于不可变列表,您可以做类似的事情:将列表的内部数组分成几个分区,并将它们全部视为不可变的。当您需要更改列表时,您只需要克隆一个分区和分区的索引,这比复制整个列表要便宜。
AWTEventMulticaster实现了类似的目标,但最小化了复制。它是一个聪明的二叉树。请参见源代码。
使用更小的内部分区或块,可以获得更快的更新速度,但通常访问较慢。使用较大的块(例如整个数组),您可以获得较慢的更新速度,但更快的访问速度。
如果您真的需要最快的访问和更新速度,则必须使用可变数组。