我是靠谱客的博主 苹果时光,这篇文章主要介绍浅析Java中for循环和foreach循环的区别一、for循环二、foreach循环三、区别四、两者效率比较,现在分享给大家,希望可以做个参考。

目录

一、for循环

二、foreach循环

三、区别

四、两者效率比较


一、for循环

1.语句最简形式为:

for( ; ; )

2.一般形式为:

复制代码
1
2
3
4
5
​ for(单次表达式;条件表达式;末尾循环体){ 中间循环体; } ​

二、foreach循环

1、foreach也叫增强for循环,foreach其实是for循环的一个特殊简化版

2、foreach的书写格式:

复制代码
1
2
3
4
for(元素类型 元素名称 : 遍历数组(集合)(或者能进行迭代的)){ 语句 }

3、foreach虽然是for循环的简化版本,但是并不是说foreach就比for更好用,foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高

4、案例

复制代码
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {   List<String> arr = new ArrayList<String>();   arr.add("你好");   arr.add("我好");   arr.add("大家好");   //foreach循环   for(String str:arr){//这里的str就是为了获取每次循环的arr中的值     System.out.println(str);//就相当于String str=arr[i]   } }

  相比较之下我们用for循环输入就略显麻烦,除了这种普通的集合还可以对像map这种键值对使用

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {   Map<String,String> mapstr = new HashMap<String,String>();   mapstr.put("王", "男");   mapstr.put("李", "男");   mapstr.put("张", "女");   //entrySet方法是为了获取键值对的集合   //这里的Map.Entry<String, String>其实就是一个类型 用来表示键值对的类型   for(Map.Entry<String,String> s:mapstr.entrySet()){     System.out.println("key="+s.getKey());     //这里其实还是相当于 s=maostr.entrySet,只不过s存储的是键值对。     System.out.println("value="+s.getValue());     //所以可以用get方法获取出来存储的键值对。   } }

5、重点 - 另外需要注意的是:

  foreach不支持在循环中添加删除操作,因为在使用foreach循环的时候数组(集合)就已经被锁定不能被修改,否则会报出java.util.ConcurrentModificationException异常

复制代码
1
2
3
4
5
6
7
8
public static void main(String[] args) {   List<String> arr = new ArrayList<String>();   arr.add("你好");   arr.add("我好");//foreach循环   for(String str:arr){     arr.add("1"); //对arr进行添加,会报错   } }

三、区别

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

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

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

四、两者效率比较

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

2、但对于链式结构LinkedList,for 循环基于下标访问会每次从头查询最好不要使用 for,foreach循环使用指针直接偏移的高效的地址运算,效率会高非常多,差距也很大。

链表循环超过10万次,for循环可能会直接卡死,而foreach仍然只需要几毫秒

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
// 普通for循环 String[] str = {"a","b","c"}; for (int i = 0; i < str.length; i++) { if(str[i]=="b") { str[i]="d"; } } // 增强for循环 foreach for (String str : strs) { if(str=="b") { str="d"; } }

3、结论:

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

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

原文章来源于:浅析Java中for循环和foreach循环的区别 - 古兰精 - 博客园

最后

以上就是苹果时光最近收集整理的关于浅析Java中for循环和foreach循环的区别一、for循环二、foreach循环三、区别四、两者效率比较的全部内容,更多相关浅析Java中for循环和foreach循环内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部