什么基本数据结构用于实现 NSOrderedSet
What fundamental data structure is used to implement NSOrderedSet
NSOrderedSet 似乎能够提供 O(1) 的哈希表查找速度和类似于对象排序的数组?用于实现此目的的数据结构是什么?它是两者的组合,例如:哈希表和一个单独的数组,其中索引 i 具有与其在哈希表中的对象对应的键?
我们不知道苹果是如何选择实现这个数据结构的。找出答案的唯一方法是对 Foundation 框架进行逆向工程。但这不是一件有用的事情,Apple 可以在每次更新时更改实现和底层数据结构。因此,依靠它来开发生产应用程序将是非常愚蠢的,因为它可能随时破坏应用程序。
如果您想自己实现它,您可以使用散列 table 和数组的方法。最好的方法是将对象存储在数组中,并让哈希映射存储由对象键入的数组索引。
当然还有其他可能的方式来实现不同的性能特征。它可能只是一个使 containsObject: 测试 O(n) 的数组,或者它可能只是一个散列 table(对象作为键,索引作为值)使得 objectAtIndex: 操作 O(n).
NSOrderedSet 似乎能够提供 O(1) 的哈希表查找速度和类似于对象排序的数组?用于实现此目的的数据结构是什么?它是两者的组合,例如:哈希表和一个单独的数组,其中索引 i 具有与其在哈希表中的对象对应的键?
我们不知道苹果是如何选择实现这个数据结构的。找出答案的唯一方法是对 Foundation 框架进行逆向工程。但这不是一件有用的事情,Apple 可以在每次更新时更改实现和底层数据结构。因此,依靠它来开发生产应用程序将是非常愚蠢的,因为它可能随时破坏应用程序。
如果您想自己实现它,您可以使用散列 table 和数组的方法。最好的方法是将对象存储在数组中,并让哈希映射存储由对象键入的数组索引。
当然还有其他可能的方式来实现不同的性能特征。它可能只是一个使 containsObject: 测试 O(n) 的数组,或者它可能只是一个散列 table(对象作为键,索引作为值)使得 objectAtIndex: 操作 O(n).