以前测试过OC的NSSet(字典也一样),发现和java中的HashMap规律一致。直接先上结果
我的测试基本步骤是,自定义对象作为 字典的key,hash返回相同, == 或者 isEqual 返回true,就判定为同一个对象,为了保证在容器对象中的正确,一般要求重写equals是要重写hashCode。比如一个人类对象,判断是否同一个人,就根据DNA属性重写isEqual)和 hash
- (BOOL)isEqual:(id)other
{
//修改 返回值 看不同结果
return false;
}
- (NSUInteger)hash
{
//修改 返回值 看不同结果
return 1;
}
Test *t1 = [Test new];
Test *t2 = [Test new];
NSMutableSet *set = [[NSMutableSet alloc] initWithObjects:t1, t2, nil];
在Swift中,测试时用的swift3.1 不管是在swift中调用 OC的类还是swift的类。swift中 == 都和 isEqual 中的返回值一致(可能还有其他的影响因素我没测到吧, 同样也是看不到源代码的具体细节,,,估计是重写了 == 函数,默认调用的就是 isEqual),上面set,字典中判断是否相等 应该就是这样了吧,
/// == 反正和isEqal 相同,没必要再判断
e.hash == hash && e.key == key