将NSMutableArray实现为2-3树的优势是什么?

时间:2014-05-04 21:55:26

标签: objective-c arrays data-structures tree nsmutablearray

我在别处读到NSMutableArray以不同的方式实现,具体取决于大小,有时实现为2-3 tree而不是内存中的数组。这意味着,删除对象等操作并不像将数组的整个尾端复制一个一样昂贵。

我想知道是否有快速的实施摘要,所以我不必深入挖掘源代码。

  1. 阵列是如何排序的?
  2. 根节点是数组的中间吗?
  3. 数组如何找到第n个元素?
  4. 还有其他优点吗? 将数组实现为2-3树而不是快速删除 数组前面附近的物体?
  5. 搜索互联网时,我找不到任何讨论将可变数组实现为树的问题。

    编辑:简答:看来NSMutableArray是作为循环缓冲区实现的,所以这个问题毫无意义。如果将数组实现为2-3树有一个优点,我仍然想知道它。

1 个答案:

答案 0 :(得分:1)

Bartosz Ciechanowski在他的博客文章"Exposing NSMutableArray"

中给出了令人难以置信的细节答案

tl; dr:这是一个“循环缓冲区:”

  

数据结构

     

正如您可能已经猜到的那样,__ NSArrayM使用循环缓冲区。这种数据结构非常简单,但比常规数组/缓冲区稍微复杂一些。当到达任何一端时,循环缓冲区的内容可以回绕。

     

循环缓冲区有一些非常酷的属性。值得注意的是,除非缓冲区已满,否则从任一端插入/删除不需要移动任何内存。让我们分析一下,与C数组相比,该类如何利用循环缓冲区的行为优越。

从历史上看,__ NSArrayM是一个比Cocoa更新的类名 - 在OSX 10.0中没有调用它,但我找不到旧名称的好链接。也许它曾经是一棵树。您的第一条评论中的link听起来像是在2005年,在大尺寸下它不是内部的循环缓冲区。