for循环优化

一、多个for循环,遵循外小内大

stratTime = System.nanoTime();  
for (int i = 0; i < 10000000; i++) {  
    for (int j = 0; j < 10; j++) {  
          
    }  
}  
endTime = System.nanoTime();  
System.out.println("外大内小耗时:"+ (endTime - stratTime));  

改为:

stratTime = System.nanoTime();  
for (int i = 0; i <10 ; i++) {  
    for (int j = 0; j < 10000000; j++) {  
          
    }  
}  
endTime = System.nanoTime();  
System.out.println("外小内大耗时:"+(endTime - stratTime)); 

消耗时间对比:

外大内小耗时:200192114  
外小内大耗时:97995997

原因:

两者的循环次数是一直的,造成性能差异,主要是实例化次数和初始化次数不一样。

 

二、提取与循环无关的表达式到循环外

stratTime = System.nanoTime();  
for (int i = 0; i < 10000000; i++) {  
    i=i*a*b;  
}  
endTime = System.nanoTime();  
System.out.println("未提取耗时:"+(endTime - stratTime)); 

改为:

stratTime = System.nanoTime();  
c = a*b;  
for (int i = 0; i < 10000000; i++) {  
    i=i*c;  
}  
endTime = System.nanoTime();  
System.out.println("已提取耗时:"+(endTime - stratTime)); 

耗时对比:

未提取耗时:45973050  
已提取耗时:1955

 

三、消除循环终止时的方法调用

stratTime = System.nanoTime();  
for (int i = 0; i < list.size(); i++) {  
      
}  
endTime = System.nanoTime();  
System.out.println("未优化list耗时:"+(endTime - stratTime)); 

改为:

stratTime = System.nanoTime();  
int size = list.size();  
for (int i = 0; i < size; i++) {  
      
}  
endTime = System.nanoTime();  
System.out.println("优化list耗时:"+(endTime - stratTime));

耗时对比:

未优化list耗时:27375  
优化list耗时:2444

 

四、异常捕获

stratTime = System.nanoTime();  
for (int i = 0; i < 10000000; i++) {  
    try {  
    } catch (Exception e) {  
    }  
}  
endTime = System.nanoTime();  
System.out.println("在内部捕获异常耗时:"+(endTime - stratTime)); 

改为:

stratTime = System.nanoTime();  
try {  
    for (int i = 0; i < 10000000; i++) {  
    }  
} catch (Exception e) {  
  
}  
endTime = System.nanoTime();  
System.out.println("在外部捕获异常耗时:"+(endTime - stratTime)); 

耗时对比:

在内部捕获异常耗时:12150142  
在外部捕获异常耗时:1955

 

五、拆分为多个循环

https://www.cnblogs.com/yulinlewis/p/9784693.html

为了优化 for 循环,可以考虑以下几种方法: 1. 使用迭代器代替下标循环:在循环中使用迭代器,而不是使用下标来访问列表元素,可以减少下标计算的开销,并且在处理大型列表时可以提高性能。 2. 避免重复计算:如果在循环中需要计算某些值,可以考虑在循环之前计算这些值,并将它们存储在变量中。这样可以避免在每次迭代时重复计算。 3. 合并循环:如果有多个循环迭代相同的列表,可以考虑将它们合并为一个循环,以减少循环的数量和访问列表的次数。 4. 使用并行化技术:如果循环中的计算可以并行执行,可以使用并行化技术,如多线程或多进程,以加速循环的执行。 5. 优化循环体内部的代码:循环体内部的代码也可能是性能瓶颈,可以使用一些优化技术来加速代码的执行,如使用更高效的算法或数据结构,减少内存分配和释放等。 下面是一个 for 循环优化的示例代码: ```python import time # 原始代码 start_time = time.time() sum = 0 for i in range(1000000): sum += i end_time = time.time() print("原始代码执行时间:", end_time - start_time) # 优化后的代码 start_time = time.time() sum = sum(range(1000000)) end_time = time.time() print("优化后的代码执行时间:", end_time - start_time) ``` 在上面的示例代码中,我们使用了内置函数 `sum` 来代替 for 循环来计算 0 到 999999 的和。这种方法比 for 循环更快,因为sum函数在 C 语言中实现,比 Python 解释器更快。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值