iOS NSSet與NSArray的區別

2021-07-23 07:33:33 字數 1686 閱讀 4750

明天請假回家了,這個月定的部落格目標還沒達成,趕緊來補充上。這篇文章半個月前就想寫了,因為那天突然被人問道nsset,腦子一過電,發現寶寶跟本沒有用過好不啦,但是最近工作比較忙準備好的材料也沒有整理,下面我們趕緊看下nsset和nsarray的區別吧!

首先,nsset和nsarray功能性質一樣,用於儲存物件

,屬於集合。但是和naarray不一樣的是它屬於 「無序集合」,在記憶體中儲存方式是不連續的,而nsarray是 「有序集合」 它記憶體中儲存位置是連續的。 其次

,nsset的效率確實是比nsarray高的,因為它主要用的是

hash演算法,我的理解中,nsset在集合中尋找乙個元素的時候是一針見血,找到目標順著就去了;而nsarray的話需要迴圈集合中所有的物件,來找到所需要的目標。所以,迴圈所有物件與直接去物件的位置獲取,速度就顯而易見了。

最後,你額外還需要主意兩點

1.nsset,nsarray都是類,只能新增物件,如果需要加入基本資料型別(int,float,bool,double等),需要將資料封裝成nsnumber型別

。2.由於nsset是用hash實現的所以就造就了它查詢速度比較快,但是我們不能把某某物件存在第幾個元素後面之類的有關下標的操作。

hash:

無序集合

:集合裡的元素只能遍歷

有序集合

:集合裡的元素可以根據key或index訪問

nsset 常用方法總結

+(id)setwithobjects:obj1,obj2,...nil

使用一組物件建立新的集合

-(id)initwithobjects:obj1,obj2,....nil

使用一組物件初始化新分配的集合

-(nsuinteger)count

返回集合成員個數

-(bool)containsobject:obj

確定集合是否包含物件 obj

-(bool)member:obj

確定集合是否包含物件 obj

-(nsenumerator*)objectenumerator

返回集合中所有物件到乙個 nsenumerator 型別的物件

-(bool)issubsetofset:nsset

判斷集合是否是nsset的子集

-(bool)intersectsset:nsset

判斷兩個集合的交集是否至少存在乙個元素

-(bool)isequaltoset:nsset

判斷兩個集合是否相等

nsmutableset 常用方法總結

-(id)setwithcapcity:size

建立乙個有size大小的新集合

-(id)initwithcapcity:size

初始化乙個新分配的集合,大小為size

-(void)addobject:obj

新增物件 obj 到集合中

-(void)removeobject:obj

從集合中刪除物件 obj

-(void)removeallobjects

刪除集合中所有物件

-(void)unionset:nsset

將nsset的所有元素新增到集合

-(void)minusset:nsset

從集合中去掉所有的nsset 的元素

-(void)interectset:nsset

集合和nsset 做交集運算

OC基礎 OC三大基本資料結構 NSArray

一 oc三大基本資料結構之nsarray 基類 nsarray 不可變陣列,陣列一旦建立,陣列的元素個數和順序不可變。子類 nsmutablearray 可變陣列,繼承了基類的方法,又有自己的關於修改元素個數和順序的方法。二 nsarray的使用 1.建立陣列 nsarray array1 nsar...

SQL與NoSQL MySQL與NoSQL的融合

寫這一篇內容的原因是mysql5.6.2突然推出了memcached的功能。nosql to innodb with memcached的出現,可以看出nosql對關聯式資料庫的確產生了巨大的影響,個人覺得這是乙個非常大的進步,可以讓開發人員更加方便的使用nosql和關聯式資料庫。nosql一般被認...

指標與陣列 a與 a區別

假設宣告了乙個陣列a,則 a表示陣列a的首位址,a與 a 0 表示陣列a首元素的首位址,那麼 a 1與a 1有哪些區別呢?通過下面的實驗來說明。int i 0 int a 5 int p int a 1 for i 0 i 5 i printf a 0x p,a 0x p,a 1 0x p n a,...