• IOS各种集合遍历效率对比


    前言:

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

     结论:遍历最快速的是枚举器遍历  其他三种遍历效率 相差无几

  • 相关阅读:
    javascript深入理解js闭包
    【STL源码学习】STL算法学习之一
    【STL源码学习】细品vector
    【C++深入浅出】智能指针之auto_ptr学习
    【字典树应用】联想用户最想输入的词汇
    【数据结构】非常有用的hash表
    【WIN32进阶之路】:内存映射文件
    【WIN32进阶之路】:线程同步技术纲要
    win32进阶必备:多线程同步之互斥锁
    【C++深入浅出】设计模式学习之单例模式
  • 原文地址:https://www.cnblogs.com/whoislcj/p/5468000.html
Copyright © 2020-2023  润新知