Android三种for循环效率测试

安卓到现在为止我遇到了两种for循环方式,而常用的for (int i=0;i<mDatas.size();i++)的方式又可以把mDatas的size提前计算出来,然后再进行循环,所以姑且当做三种。这里对这三种方式的效率进行一个简单的测试。

首先

for (int i=1;i<=100000;i++){
    mDatas.add(i);
}
我们先向mDatas里添加十万条数据,然后再依次循环取出。

方式一:

long start = System.currentTimeMillis();
for (int i=0;i<mDatas.size();i++){
    Log.d("i=",mDatas.get(i)+"");
}
long end = System.currentTimeMillis();
long time = end - start;
Log.d("log=","time = "+time+ ",length = "+mDatas.size());
来看下循环三次的log

D/log=: time = 1943,length = 100000
D/log=: time = 1947,length = 100000
D/log=: time = 1865,length = 100000

取平均值:time = 1918ms。

方式二:

int length = mDatas.size();
long start = System.currentTimeMillis();
for (int i=0;i<length;i++){
    Log.d("i=",mDatas.get(i)+"");
}
long end = System.currentTimeMillis();
long time = end - start;
Log.d("log=","time = "+time+ ",length = "+mDatas.size());
这里提前计算出了mDatas的size,我们再来看下log

D/log=: time = 1888,length = 100000
D/log=: time = 1817,length = 100000
D/log=: time = 1908,length = 100000

取平均值:time = 1871ms。

方法三:

long start = System.currentTimeMillis();
for (int i:mDatas){
    Log.d("i=",i+"");
}
long end = System.currentTimeMillis();
long time = end - start;
Log.d("log=","time = "+time+ ",length = "+mDatas.size());

再来看下log

D/log=: time = 1848,length = 100000
D/log=: time = 1843,length = 100000
D/log=: time = 1874,length = 100000

取平均值:time = 1855ms;

这里的数组长度为10万,当数组长度增加到100万时测试数据如下

方法一:

D/log=: time = 25831,length = 1000000
D/log=: time = 26365,length = 1000000
D/log=: time = 26640,length = 1000000

取平均值:time = 26279ms。

方法二:

D/log=: time = 21136,length = 1000000
D/log=: time = 23325,length = 1000000
D/log=: time = 23655,length = 1000000

取平均值:time = 22705ms。

方法三:

D/log=: time = 19871,length = 1000000
D/log=: time = 19334,length = 1000000
D/log=: time = 20600,length = 1000000

取平均值:time = 19935ms。

可以看到,方法三优于方法二优于方法三,而且数组的长度越长其差距越明显。

注:此次测试应用环境为android studio,手机为红米note3,其它环境可能有差异。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值