IOS各種集合遍歷效率對比

總李寫程式碼發表於2016-05-07

前言:

    對於ios專案開發中總會遇見各種集合遍歷,出於對各種遍歷效率的好奇心,所以準備寫個測試程式測試一下

 

首先:先宣告一個NSMutableArray,測試資料量分別是1000條,10000條,100000條。

int testMaxCount =1000;//10000,100000
    
NSMutableArray *testArray=[[NSMutableArray alloc]init];
 for (int i =0; i<testMaxCount; i++) {
        [testArray addObject:@"test"];
}
    

第一種:普通for迴圈

   //普通for迴圈
    
    CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
    
    for(int i =0;i<[testArray count];i++){
        NSLog(@"%@",testArray[i]);
    }
    
    CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
    NSLog(@" 普通for迴圈 time cost: %0.3f", end - start);

第二種:for in 迴圈

  // for in 迴圈
    start = CFAbsoluteTimeGetCurrent();
    
    for(NSString *tempStr in testArray){
        NSLog(@"%@",tempStr);
    }
    
    end = CFAbsoluteTimeGetCurrent();
    NSLog(@" for in 迴圈 time cost: %0.3f", end - start);

第三種:程式碼塊迴圈

 //程式碼塊
    start = CFAbsoluteTimeGetCurrent();
    [testArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        NSLog(@"%@",obj);
        
    }];
    end = CFAbsoluteTimeGetCurrent();
    NSLog(@"程式碼塊 迴圈 time cost: %0.3f", end - start);

第四種:列舉器迴圈

  //列舉器
    start = CFAbsoluteTimeGetCurrent();
    NSEnumerator *enumerator=[testArray objectEnumerator];
    while (enumerator.nextObject) {
        NSLog(@"%@",enumerator.nextObject);
    }
    end = CFAbsoluteTimeGetCurrent();
    NSLog(@"列舉器 迴圈 time cost: %0.3f", end - start);

執行結果:

1.測試資料    1000條      10000條     100000條

普通for迴圈:0.391       2.390       18.400

for- in迴圈 :0.226       2.782       15.172

程式碼塊迴圈 :0.241       2.744        15.123

列舉器迴圈 :0.147       1.429         7.432

 結論:遍歷最快速的是列舉器遍歷  其他三種遍歷效率 相差無幾

 

相關文章