1

我知道 NSSet 不保留顺序,我很好奇在 iOS4/iOS5 sdks 中迭代顺序是如何实现的。你有什么想法?

4

1 回答 1

2

简短的回答: 顺序是随机的。

长答案: 根据定义,没有指定顺序。换句话说,它取决于实现。在常见的实现中,每个对象都被转换为一个整数(哈希码),用于快速找到集合中的对象(索引哈希表),然后通过哈希码实现迭代顺序(哈希码基本上是一个数组指数)。

请注意,如果两个对象具有相同的哈希码(但它们不相等),则它们的顺序仅取决于集合上插入/删除操作的顺序。

由于常见的哈希表实现对不同的数据大小使用不同的哈希函数,因此当集合大小增加时,顺序可能会完全改变。

于 2011-11-16T22:56:23.163 回答