我知道NSSet不保留顺序,我对如何在iOS4 / iOS5 sdks中实现迭代顺序感到好奇。你有什么想法吗?
答案 0 :(得分:2)
简答: 订单是随机的。
长答案: 根据定义,未指定订单。换句话说,它取决于实施。 在通常的实现中,每个对象都被转换为整数(哈希码),用于快速查找集合中的对象(索引哈希表),然后通过哈希码实现迭代顺序(哈希码基本上是一个数组)索引)。
请注意,如果两个对象具有相同的哈希码(但它们不相等),则它们的顺序仅取决于该集上的插入/删除操作的顺序。
由于常见的哈希表实现对不同的数据大小使用不同的哈希函数,因此当设置大小增加时,顺序可以完全改变。