您的位置:首页 > 移动开发 > IOS开发

IOS各种集合遍历效率对比

2016-05-07 11:17 316 查看
前言:

对于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

结论:遍历最快速的是枚举器遍历 其他三种遍历效率 相差无几
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: