关于JAVA for循环效率的问题
梦鱼的鹿 2012-07-14 07:30:02 今天在C#里面看到:
之前一直认为
for (int i = 0, h = arr.Count; i < h; i++)
和
for (int i = 0; i < arr.Count; i++)
两种写法,在C#里应该是差不多的,今天突然有人问,就写了个程序测试了一下,结果出乎我的意料
如果arr是List<T>,前者的效率比后者高大约一倍,如果arr是string[],两者效率基本差不多
原帖子地址:http://topic.csdn.net/u/20120706/16/CEB33682-FF71-402C-9FE9-580F5ECFDFC1.html
我写的代码测试:int tnum = 1000000; // 添加或查找的次数
int outnum = 10; // 外层循环次数
ArrayList<String> arr = new ArrayList<String>();
for (int i = 0; i < tnum; i++) {
arr.add(Integer.toString(i));
}
String[] arr2 = new String[tnum];
for(int j=0;j<outnum;j++)
{
Long time = System.currentTimeMillis();
String msg;
msg = "Number ";
for (int i = 0, h = arr.size(); i < h; i++)
{
}
time = System.currentTimeMillis()-time;
System.out.println(msg+"耗时:"+time);
msg = ".Count ";
time = System.currentTimeMillis();
for (int i = 0; i < arr.size(); i++)
{
}
time = System.currentTimeMillis()-time;
System.out.println(msg+"耗时:"+time);
msg = "Length ";
time = System.currentTimeMillis();
for (int i = 0; i < arr2.length; i++)
{
}
time = System.currentTimeMillis()-time;
System.out.println(msg+"耗时:"+time);
}
我发现时间都差不多啊,难道是因为ArrayList的原因?还是JAVA这个用的时间本来就是一样的?