NSSet的唯一性判斷

我們已經知道NSSet是一個保證唯一性的集合,但是它是如何保證唯一性的呢,調用addObject時是如何判斷唯一性的呢?

創(chuàng)建一個測試類繼承于NSObject,如下:

//NSTest.h

#import <Foundation/Foundation.h>

@interface NSTest :NSObject

@end

NSTest.m什么也不做,測試代碼如下:

NSMutableSet* setA = [NSMutableSet new];

NSTest* test1 = [[NSTest alloc]init];

[setA addObject:test1];

NSTest* test2 = [[NSTest alloc]init];

[setA addObject:test2];

NSLog(@"setA : %@", setA);

打印結果是setA里面有2個NSTest的對象

接著修改NSTest.m,添加2個繼承自NSObject的函數(shù)

- (BOOL)isEqual: (id)other

{

return YES;

}

- (NSUInteger)hash

{

return 1;

}

這時候再執(zhí)行之前的測試代碼,setA里面就只有一個NSTest對象了

也就是說set是根據(jù)hash函數(shù)和isEqual來確定一個對象是否已經存在于set內,再深入點修改這2個函數(shù)的不同返回值,就會發(fā)現(xiàn),是先判斷2個對象的hash值是否一致,如果一致再判斷其isEqual值。

明白了這點,就可以通過重寫isEqual和hash來定制我們自己的業(yè)務流程,使用set來做唯一性判斷了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 對數(shù)據(jù)的等同性判斷包括對基本數(shù)據(jù)類型等同性的判斷和對象等同性的判斷。對基本數(shù)據(jù)類型等同性的判斷是非常簡單的,...
    VV木公子閱讀 1,791評論 0 8
  • Objective-C作為面向對象編程,“對象”(object)就是“基本構造單元”(building block...
    Mark_Lin閱讀 420評論 0 1
  • Objc 相等性判斷 今天做任務時遇到一個問題,情況是這樣的:我新建一個類,然后創(chuàng)建一個這個類的對象,然后將這個類...
    凌巔閱讀 1,605評論 0 1
  • 轉至元數(shù)據(jù)結尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,084評論 0 9
  • 舌頂上腭搭座橋 忙里偷閑睡一覺 希夷先生來指導 諸般煩惱盡皆銷
    緣渡閱讀 225評論 3 1

友情鏈接更多精彩內容