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低。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的foreach是同步还是异步JAVA,Java中foreach与正常for循环效率对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 崩坏三女武神最高多少级
- 下一篇: java 解决故意弄得错误,高效的Jav