900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > foreach是同步还是异步JAVA Java中foreach与正常for循环效率对比

foreach是同步还是异步JAVA Java中foreach与正常for循环效率对比

时间:2024-06-23 12:49:24

相关推荐

foreach是同步还是异步JAVA Java中foreach与正常for循环效率对比

在Java中对于集合的遍历,一般有以下三种方法:

for循环

foreach循环

Iterator遍历

下面来分析一下for循环和foreach循环的效率对比以及简单分析一下原因。

看下面的代码:

public class ForTest {

public static void testArrayList(ArrayList arrayList) {

System.out.println("测试ArrayList for");

long starTime = System.currentTimeMillis();

for(int i =0;i

int x = arrayList.get(i);

}

long endTime = System.currentTimeMillis();

System.out.println("时间是:"+(endTime - starTime));

System.out.println("测试ArrayList foreach");

long starTime1 = System.currentTimeMillis();

for(int i: arrayList) {

int y = i;

}

long endTime1 = System.currentTimeMillis();

System.out.println("时间是:"+(endTime1 - starTime1));

}

public static void testLinkedList(LinkedList linkedList) {

System.out.println("测试linkedList for");

long starTime = System.currentTimeMillis();

for(int i =0;i

int x = linkedList.get(i);

}

long endTime = System.currentTimeMillis();

System.out.println("时间是:"+(endTime - starTime));

System.out.println("测试linkedList foreach");

long starTime1 = System.currentTimeMillis();

for(int i: linkedList) {

int y = i;

}

long endTime1 = System.currentTimeMillis();

System.out.println("时间是:"+(endTime1 - starTime1));

}

public static void main(String[] args) {

ArrayList arrayList = new ArrayList<>();

LinkedList linkedList = new LinkedList<>();

for(int i =0;i<100000;i++) {

arrayList.add(i);

linkedList.add(i);

}

testArrayList(arrayList);

testLinkedList(linkedList);

}

}

对比如下:

测试ArrayList for

时间是:6

测试ArrayList foreach

时间是:5

测试linkedList for

时间是:4515

测试linkedList foreach

时间是:2

从以上答案分析出ArrayList中for和foreach循环效率差不多,但是LinkedList中for循环效率明显比foreach循环效率低很多。

分析字节码:

image.png

从字节码中可以看出:对于for循环就是调用get(i)取得元素,而对于foreach是通过iterator实现的遍历,上述结果产生的原因主要是因为不同的数据结构产生的。

对于ArrayList来说,它是通过一个数组实现的,可以随机存取;但是LinkedList是通过链表实现的,for循环时要获取第i个元素必须从头开始遍历,而iterator遍历就是从头开始遍历,遍历完只需要一次,所以for循环需要的时间远远超过for循环。

总结:

对于数组来说,for和foreach循环效率差不多,但是对于链表来说,for循环效率明显比foreach低。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。