龙空技术网

简单聊聊JAVA中for foreach区别

跑调小荣 156

前言:

眼前你们对“javaforeachfor”大概比较注意,我们都需要知道一些“javaforeachfor”的相关内容。那么小编同时在网摘上收集了一些对于“javaforeachfor””的相关文章,希望兄弟们能喜欢,各位老铁们一起来学习一下吧!

一、区别

1)for循环是基于下标(偏移量)来定位的循环。

2)foreach是基于指针直接移动(地址运算)的循环。

3)foreach与for循环的明显差别在于foreach循环时循环对象(数组、集合)被锁定,不能对循环对象中的内容进行增删改操作。

二、两者效率比较

对于通过下标访问的数据结构。例如数组,Arraylist 使用下标访问的for循环效率本身就很高。所以foreach这种指针直接移动的效率可能甚至不如通过下标访问。但差别不会太大

但对于链式结构LinkedList,for基于下标访问会每次从头查询,最好不要使用for。foreach循环使用指针直接偏移的高效的地址运算,效率会高非常多,差距也很大。链表循环超过10万次for循环可能会直接卡死,而foreach仍然只需要几毫秒。

例:普通for循环

package ch02;

import java.util.Arrays;

public class Test {

public static void main(String[] args) {

String[] str = {"a","b","c"};

for (int i = 0; i < str.length; i++) {

if(str[i]=="b") {

str[i]="d";

}

}

System.out.println(Arrays.toString(str));

}

}

//运行结果:[a, d, c]

增强for循环:

package ch02;

import java.util.Arrays;

import java.util.Iterator;

public class Test {

public static void main(String[] args) {

String[] strs = {"a","b","c"};

for (String str : strs) {

if(str=="b") {

str="d";

}

}

System.out.println(Arrays.toString(strs));

}

}

//运行结果:[a, b, c]

结论:需要循环数组结构的数据时,建议使用普通for循环,因为for循环采用下标访问,对于数组结构的数据来说,采用下标访问比较好。

需要循环链表结构的数据时,一定不要使用普通for循环,数据量大的时候有可能会导致系统崩溃。

标签: #javaforeachfor