0

既然你不能随机访问 NSMutableSet 的元素,这是否意味着它像链表一样实现?

即它会比 NSMutableArray 有更快的插入/删除吗?

4

4 回答 4

5

源代码是可用的,所以你可以看看:CFSet.c。(这是 Core Foundation 的对应物NSSet,但它们基本相同。)它是一个哈希表。

但是你也应该记住,NSArray其实并不是作为数组来实现的。你可以在这里看到实现:CFArray.c。也许这篇博客文章更容易理解,虽然它有点过时(~5 年。)

于 2010-12-11T16:46:14.780 回答
2

不会。查找时间会更快,因为它会使用哈希。

于 2010-12-11T15:29:31.040 回答
2

我不是 Objective-C 程序员,但通常集合是通过哈希表实现的,它(如果正确完成)将为插入、删除和查找产生 O(1)。

从技术上讲,散列通常给你 O(M),其中 M 是键的大小,但对于一个集合,你只需使用键对象的 id,它是恒定的,所以你回到 O(1)。

于 2010-12-11T15:31:46.733 回答
0

集合通常使用平衡二叉搜索树(例如红黑树、avl 树)来实现。

于 2010-12-11T15:26:52.423 回答