我在别处读到NSMutableArray
以不同的方式实现,具体取决于大小,有时实现为2-3 tree而不是内存中的数组。这意味着,删除对象等操作并不像将数组的整个尾端复制一个一样昂贵。
我想知道是否有快速的实施摘要,所以我不必深入挖掘源代码。
搜索互联网时,我找不到任何讨论将可变数组实现为树的问题。
编辑:简答:看来NSMutableArray是作为循环缓冲区实现的,所以这个问题毫无意义。如果将数组实现为2-3树有一个优点,我仍然想知道它。
答案 0 :(得分:1)
Bartosz Ciechanowski在他的博客文章"Exposing NSMutableArray"
中给出了令人难以置信的细节答案tl; dr:这是一个“循环缓冲区:”
数据结构
正如您可能已经猜到的那样,__ NSArrayM使用循环缓冲区。这种数据结构非常简单,但比常规数组/缓冲区稍微复杂一些。当到达任何一端时,循环缓冲区的内容可以回绕。
循环缓冲区有一些非常酷的属性。值得注意的是,除非缓冲区已满,否则从任一端插入/删除不需要移动任何内存。让我们分析一下,与C数组相比,该类如何利用循环缓冲区的行为优越。
从历史上看,__ NSArrayM是一个比Cocoa更新的类名 - 在OSX 10.0中没有调用它,但我找不到旧名称的好链接。也许它曾经是一棵树。您的第一条评论中的link听起来像是在2005年,在大尺寸下它不是内部的循环缓冲区。