for循环的两种方法有什么不同?

时间:2021-05-24 19:35:22
初学java,书上一直都是用for(表达式1;表达式2;表达式3){}这个的,但最近上网看见人家写的代码有时候用for(String i:filename) {}这种的,我想问问这2中方法有什么不同的地方,用法都是怎么样的?什么时候该用什么for方法?希望大家能帮帮小弟,谢谢了!!!

48 个解决方案

#1


第一种是传统用法,第二种是java 1.5新加入的"for each"特性,用来遍历一个数组或集合。
冒号右边需要是一个数组或者集合类对象,左边则是一个该数组或集合中元素类型的变量,如:

int[] arr = { 12, 4, 53, 75, 23, 82, 34 };
for (int i : arr)
  System.out.println(i);
// 输出:
// 12
// 4
// 53
// 75
// 23
// 82
// 34

又如:

List<String> list = new ArrayList<String>();
list.add("Java");
list.add("C++");
list.add("C");
list.add("C#");
for (String s : list)
  System.out.println(s);
// 输出:
// Java
// C++
// C
// C#

如果使用for循环仅仅是为了遍历一个集合,那么推荐用上面这种结构。

#2


一种简便写法而已。

#3


视情况而定。

#4


for each 是在不知道集合大小的情况下使用的

#5


for(String i:filename) {}
这种JDK5.0的新特性,就是遍历数组filename里的元素
和for(i=0;i<filename.length;i++){}是一样的

#6


JDK5.0以后的新特性 更简单的写法而已

#7


学习了。

#8


我想这两种关于用法上的区别就是,当你在循环中想跟据次数做一定的判断时用for( 表达式1:表达式2:表达式3)这种写法,如果想全部遍历那就用for (String s : list)这种方法

#9


第一种是传统用法,第二种是java 1.5新加入的"for each"特性,用来遍历一个数组或集合。 
冒号右边需要是一个数组或者集合类对象,左边则是一个该数组或集合中元素类型的变量,如: 

Java code
int[] arr = { 12, 4, 53, 75, 23, 82, 34 };
for (int i : arr)
  System.out.println(i);
// 输出:
// 12
// 4
// 53
// 75
// 23
// 82
// 34



又如: 

Java code
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("C++");
list.add("C");
list.add("C#");
for (String s : list)
  System.out.println(s);
// 输出:
// Java
// C++
// C
// C#


#10


一个是1.5的新特性 一个是之前的写法  
但是之前的写法灵活性比较大  循环是可以进行任何的判断
但是新特性 只能是全部遍历  不能对某一个元素进行判断

#11


引用 1 楼 Dan1980 的回复:
第一种是传统用法,第二种是java 1.5新加入的"for each"特性,用来遍历一个数组或集合。
冒号右边需要是一个数组或者集合类对象,左边则是一个该数组或集合中元素类型的变量,如:
Java codeint[] arr={12,4,53,75,23,82,34};for(inti : arr)
  System.out.println(i);//输出://12//4//53//75//23//82//34
又如:
Java codeList<String>list=newArrayList<String>();
list.add("Java");
list.add("C++");
list.add("C");
lis…


同意。

#12


第二种是第一种的具体实现形式,定义了类型而已。

#13


ding

#14


既然看到了也记下了,对以后有帮助吧

#15


在J2SE 5.0中可以使用新的foreach语法,这么写:

int[] arr = {1, 2, 3, 4, 5};for(int element : arr)    System.out.println(element);每一次从arr中取出的元素,会自动设定给element,你不用自行判断是否超出了数组的长度,

 使用for each循环语句的优势在于更加简洁,更不容易出错


for each实质上用的是Iterator的原理

#16


个人认为,for each更适合用于打印输出信息
而传统的方法用于算法更合适

#17


学习了...

#18


java 1.5新加入的"for each"特性,
楼上有些说的不够准确。
此特性只适用于实现了Iteratable迭代器接口的对象
集合Collection及其子类基本上都实现了这个接口

而对于没有实现这个接口的对象就不可以用这个新特性

希望LZ子安在清楚了

#19


新特性,据说性能要高一点.

#20


再记一下

#21


受益匪浅..谢谢大家了..

#22


前几天,老师刚好讲到这问题,没听清楚。
真的受益匪浅,谢谢大家!

#23


学习

#24


在C#中也见过。
这年头,各个语言都互抄。

#25


学习了。貌似php语言中的foreach吧?

#26


学习了,多一种写法,就多一些思路,好。

#27


用这种写法性能上是有一定的提升的

#28



后者是 JDK1.5里面提出的循环 方便一些! 和泛型一起使用比较安逸!

#29


第二种是JDK5.0提出的新特性,就是为了遍历一个数组,这样做的方便就是不用类型判定

#30


引用 4 楼 wangshikang_it 的回复:
for each 是在不知道集合大小的情况下使用的


对就是这样,for each 不能控制大小,它把所有的都遍历出来了,有时需要控制大小的还得用传统方法

#31


标记下!.....

#32


增强的FOR循环嘛

#33


是Java1.5之后引入的新语法,楼主看的书有点老,跟不上形式了,呵呵。

#34


引用 4 楼 wangshikang_it 的回复:
for each 是在不知道集合大小的情况下使用的

个人感觉更准确的说法应该是:在“不关心”集合大小的情况下使用。
对于一个给定的集合,“不知道大小”的情况并没有很多,但“不关心”具体的大小,只是想把其中的每个元素都过一遍的情况却非常多。

#35


5.0以后是新特性。

#36


for(;;)和for(;)是前者在所有的程序设计都可以见到,后者只在java中看到,而且还是5.0的新特性

#37


C#中也有类似的。只不过用了另一个关键字。

#38


这是jkd5提供的一个新的for循环功能,自动对容器类进行了循环.个人感觉很好用。

#39


效果一样,个人更倾向于第二种
不过,JDK需5。0以后的可支持

#40



int[] arr = { 12, 4, 53, 75, 23, 82, 34 };
for (int i : arr)
  System.out.println(i);
// 输出:
// 12
// 4
// 53
// 75
// 23
// 82
// 34






引用 5 楼 haoxiongok 的回复:
for(String i:filename) {} 
这种JDK5.0的新特性,就是遍历数组filename里的元素 
和for(i=0;i <filename.length;i++){}是一样的

#41


引用楼主 zhangzhongliang 的帖子:
初学java,书上一直都是用for(表达式1;表达式2;表达式3){}这个的,但最近上网看见人家写的代码有时候用for(String i:filename) {}这种的,我想问问这2中方法有什么不同的地方,用法都是怎么样的?什么时候该用什么for方法?希望大家能帮帮小弟,谢谢了!!!



for(String i:filename) {} 这个是jdk5中的,用for(表达式1;表达式2;表达式3){}这个是所有的jdk都可以用的。

#42


又学会了一点了....

#43


当需要将数组或集合的中的各元素都打印出来时用第二种方法比较便捷。
都需要打印其中的部分元素,则使用第一种的传统用法。

#44


jdk5的新特性。

简化了原始for的操作。
当然不是每种情况下都可以由for到foreach。

还有一点,使用foreach是因为实现了Iterable接口获得的,你也可以自己写点容器去实现这个接口,就可以用这个方便的foreach了。

#45


长见识了
int[] arr = { 12, 4, 53, 98, 23, 82, 43 }; 
for (int i : arr) 
  System.out.println(i); 
// 输出: 
// 12 
// 4 
// 53 
// 98 
// 23 
// 82 
// 43 

#46


学习了~!

#47


学习了呀学习了呀

#48


顶,加,学

#1


第一种是传统用法,第二种是java 1.5新加入的"for each"特性,用来遍历一个数组或集合。
冒号右边需要是一个数组或者集合类对象,左边则是一个该数组或集合中元素类型的变量,如:

int[] arr = { 12, 4, 53, 75, 23, 82, 34 };
for (int i : arr)
  System.out.println(i);
// 输出:
// 12
// 4
// 53
// 75
// 23
// 82
// 34

又如:

List<String> list = new ArrayList<String>();
list.add("Java");
list.add("C++");
list.add("C");
list.add("C#");
for (String s : list)
  System.out.println(s);
// 输出:
// Java
// C++
// C
// C#

如果使用for循环仅仅是为了遍历一个集合,那么推荐用上面这种结构。

#2


一种简便写法而已。

#3


视情况而定。

#4


for each 是在不知道集合大小的情况下使用的

#5


for(String i:filename) {}
这种JDK5.0的新特性,就是遍历数组filename里的元素
和for(i=0;i<filename.length;i++){}是一样的

#6


JDK5.0以后的新特性 更简单的写法而已

#7


学习了。

#8


我想这两种关于用法上的区别就是,当你在循环中想跟据次数做一定的判断时用for( 表达式1:表达式2:表达式3)这种写法,如果想全部遍历那就用for (String s : list)这种方法

#9


第一种是传统用法,第二种是java 1.5新加入的"for each"特性,用来遍历一个数组或集合。 
冒号右边需要是一个数组或者集合类对象,左边则是一个该数组或集合中元素类型的变量,如: 

Java code
int[] arr = { 12, 4, 53, 75, 23, 82, 34 };
for (int i : arr)
  System.out.println(i);
// 输出:
// 12
// 4
// 53
// 75
// 23
// 82
// 34



又如: 

Java code
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("C++");
list.add("C");
list.add("C#");
for (String s : list)
  System.out.println(s);
// 输出:
// Java
// C++
// C
// C#


#10


一个是1.5的新特性 一个是之前的写法  
但是之前的写法灵活性比较大  循环是可以进行任何的判断
但是新特性 只能是全部遍历  不能对某一个元素进行判断

#11


引用 1 楼 Dan1980 的回复:
第一种是传统用法,第二种是java 1.5新加入的"for each"特性,用来遍历一个数组或集合。
冒号右边需要是一个数组或者集合类对象,左边则是一个该数组或集合中元素类型的变量,如:
Java codeint[] arr={12,4,53,75,23,82,34};for(inti : arr)
  System.out.println(i);//输出://12//4//53//75//23//82//34
又如:
Java codeList<String>list=newArrayList<String>();
list.add("Java");
list.add("C++");
list.add("C");
lis…


同意。

#12


第二种是第一种的具体实现形式,定义了类型而已。

#13


ding

#14


既然看到了也记下了,对以后有帮助吧

#15


在J2SE 5.0中可以使用新的foreach语法,这么写:

int[] arr = {1, 2, 3, 4, 5};for(int element : arr)    System.out.println(element);每一次从arr中取出的元素,会自动设定给element,你不用自行判断是否超出了数组的长度,

 使用for each循环语句的优势在于更加简洁,更不容易出错


for each实质上用的是Iterator的原理

#16


个人认为,for each更适合用于打印输出信息
而传统的方法用于算法更合适

#17


学习了...

#18


java 1.5新加入的"for each"特性,
楼上有些说的不够准确。
此特性只适用于实现了Iteratable迭代器接口的对象
集合Collection及其子类基本上都实现了这个接口

而对于没有实现这个接口的对象就不可以用这个新特性

希望LZ子安在清楚了

#19


新特性,据说性能要高一点.

#20


再记一下

#21


受益匪浅..谢谢大家了..

#22


前几天,老师刚好讲到这问题,没听清楚。
真的受益匪浅,谢谢大家!

#23


学习

#24


在C#中也见过。
这年头,各个语言都互抄。

#25


学习了。貌似php语言中的foreach吧?

#26


学习了,多一种写法,就多一些思路,好。

#27


用这种写法性能上是有一定的提升的

#28



后者是 JDK1.5里面提出的循环 方便一些! 和泛型一起使用比较安逸!

#29


第二种是JDK5.0提出的新特性,就是为了遍历一个数组,这样做的方便就是不用类型判定

#30


引用 4 楼 wangshikang_it 的回复:
for each 是在不知道集合大小的情况下使用的


对就是这样,for each 不能控制大小,它把所有的都遍历出来了,有时需要控制大小的还得用传统方法

#31


标记下!.....

#32


增强的FOR循环嘛

#33


是Java1.5之后引入的新语法,楼主看的书有点老,跟不上形式了,呵呵。

#34


引用 4 楼 wangshikang_it 的回复:
for each 是在不知道集合大小的情况下使用的

个人感觉更准确的说法应该是:在“不关心”集合大小的情况下使用。
对于一个给定的集合,“不知道大小”的情况并没有很多,但“不关心”具体的大小,只是想把其中的每个元素都过一遍的情况却非常多。

#35


5.0以后是新特性。

#36


for(;;)和for(;)是前者在所有的程序设计都可以见到,后者只在java中看到,而且还是5.0的新特性

#37


C#中也有类似的。只不过用了另一个关键字。

#38


这是jkd5提供的一个新的for循环功能,自动对容器类进行了循环.个人感觉很好用。

#39


效果一样,个人更倾向于第二种
不过,JDK需5。0以后的可支持

#40



int[] arr = { 12, 4, 53, 75, 23, 82, 34 };
for (int i : arr)
  System.out.println(i);
// 输出:
// 12
// 4
// 53
// 75
// 23
// 82
// 34






引用 5 楼 haoxiongok 的回复:
for(String i:filename) {} 
这种JDK5.0的新特性,就是遍历数组filename里的元素 
和for(i=0;i <filename.length;i++){}是一样的

#41


引用楼主 zhangzhongliang 的帖子:
初学java,书上一直都是用for(表达式1;表达式2;表达式3){}这个的,但最近上网看见人家写的代码有时候用for(String i:filename) {}这种的,我想问问这2中方法有什么不同的地方,用法都是怎么样的?什么时候该用什么for方法?希望大家能帮帮小弟,谢谢了!!!



for(String i:filename) {} 这个是jdk5中的,用for(表达式1;表达式2;表达式3){}这个是所有的jdk都可以用的。

#42


又学会了一点了....

#43


当需要将数组或集合的中的各元素都打印出来时用第二种方法比较便捷。
都需要打印其中的部分元素,则使用第一种的传统用法。

#44


jdk5的新特性。

简化了原始for的操作。
当然不是每种情况下都可以由for到foreach。

还有一点,使用foreach是因为实现了Iterable接口获得的,你也可以自己写点容器去实现这个接口,就可以用这个方便的foreach了。

#45


长见识了
int[] arr = { 12, 4, 53, 98, 23, 82, 43 }; 
for (int i : arr) 
  System.out.println(i); 
// 输出: 
// 12 
// 4 
// 53 
// 98 
// 23 
// 82 
// 43 

#46


学习了~!

#47


学习了呀学习了呀

#48


顶,加,学