日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

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

發(fā)布時(shí)間:2023/12/15 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 foreach是同步还是异步JAVA,Java中foreach与正常for循环效率对比 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在Java中對(duì)于集合的遍歷,一般有以下三種方法:

for循環(huán)

foreach循環(huán)

Iterator遍歷

下面來(lái)分析一下for循環(huán)和foreach循環(huán)的效率對(duì)比以及簡(jiǎn)單分析一下原因。

看下面的代碼:

public class ForTest {

public static void testArrayList(ArrayList arrayList) {

System.out.println("測(cè)試ArrayList for");

long starTime = System.currentTimeMillis();

for(int i =0;i

int x = arrayList.get(i);

}

long endTime = System.currentTimeMillis();

System.out.println("時(shí)間是:"+(endTime - starTime));

System.out.println("測(cè)試ArrayList foreach");

long starTime1 = System.currentTimeMillis();

for(int i: arrayList) {

int y = i;

}

long endTime1 = System.currentTimeMillis();

System.out.println("時(shí)間是:"+(endTime1 - starTime1));

}

public static void testLinkedList(LinkedList linkedList) {

System.out.println("測(cè)試linkedList for");

long starTime = System.currentTimeMillis();

for(int i =0;i

int x = linkedList.get(i);

}

long endTime = System.currentTimeMillis();

System.out.println("時(shí)間是:"+(endTime - starTime));

System.out.println("測(cè)試linkedList foreach");

long starTime1 = System.currentTimeMillis();

for(int i: linkedList) {

int y = i;

}

long endTime1 = System.currentTimeMillis();

System.out.println("時(shí)間是:"+(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);

}

}

對(duì)比如下:

測(cè)試ArrayList for

時(shí)間是:6

測(cè)試ArrayList foreach

時(shí)間是:5

測(cè)試linkedList for

時(shí)間是:4515

測(cè)試linkedList foreach

時(shí)間是:2

從以上答案分析出ArrayList中for和foreach循環(huán)效率差不多,但是LinkedList中for循環(huán)效率明顯比f(wàn)oreach循環(huán)效率低很多。

分析字節(jié)碼:

image.png

從字節(jié)碼中可以看出:對(duì)于for循環(huán)就是調(diào)用get(i)取得元素,而對(duì)于foreach是通過(guò)iterator實(shí)現(xiàn)的遍歷,上述結(jié)果產(chǎn)生的原因主要是因?yàn)椴煌臄?shù)據(jù)結(jié)構(gòu)產(chǎn)生的。

對(duì)于ArrayList來(lái)說(shuō),它是通過(guò)一個(gè)數(shù)組實(shí)現(xiàn)的,可以隨機(jī)存取;但是LinkedList是通過(guò)鏈表實(shí)現(xiàn)的,for循環(huán)時(shí)要獲取第i個(gè)元素必須從頭開(kāi)始遍歷,而iterator遍歷就是從頭開(kāi)始遍歷,遍歷完只需要一次,所以for循環(huán)需要的時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)for循環(huán)。

總結(jié):

對(duì)于數(shù)組來(lái)說(shuō),for和foreach循環(huán)效率差不多,但是對(duì)于鏈表來(lái)說(shuō),for循環(huán)效率明顯比f(wàn)oreach低。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的foreach是同步还是异步JAVA,Java中foreach与正常for循环效率对比的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。