OC Tips

NSArray-不可靠的Hash

2020-03-19  本文已影响0人  旭宝爱吃鱼

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

在这里有一段代码,猜猜看输出结果是什么?

NSArray *array_a = @[@"1", @"2", @"3"];
NSLog(@"a: %ld", array_a.hash);
NSArray *array_b = @[@"4", @"5", @"6"];
NSLog(@"b: %ld", array_a.hash);

心中有结果后,动手试试看。

接下来看看真实的结果。

a: 3
b: 3

是偶然吗?为什么会相同?

再来试试下一段代码。

NSArray *array_a = @[@"1", @"2", @"3", @"4"];
NSLog(@"a: %ld", array_a.hash);
NSArray *array_b = @[@"4", @"5", @"6", @"7", @"8"];
NSLog(@"b: %ld", array_a.hash);

发现什么规律了吗?

聪明的你一定发现了,hash == count

为什么呢?

来看看源码吧。

/**
 * Returns the same value as -count
 */
- (NSUInteger) hash
{
  return [self count];
}
上一篇 下一篇

猜你喜欢

热点阅读