foreach是同步还是异步JAVA,Java中foreach与正常for循环效率对比
在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)題。
- 上一篇: 崩坏三女武神最高多少级
- 下一篇: java 解决故意弄得错误,高效的Jav