黑马程序员技术交流社区
标题:
关于For循环增强的问题
[打印本页]
作者:
罗衎
时间:
2011-7-24 22:37
标题:
关于For循环增强的问题
for循环增强,其模式的一般格式
for(type 变量名:变量集合名)
{}
增强循环和for常规的循环 ,有什么优势?
能不能写个for增强循环的代码?
谢谢
作者:
那日苏
时间:
2011-7-24 22:47
增强型的for循环优点主要体现在实现了Iterable接口的集合和泛型中,举个例子比如对 set 的遍历一般是迭代遍历:[code=java]Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}[/code]for循环遍历时为:[code=java]for (String str : set) {
System.out.println(str);
}[/code]
作者:
杨志罡
时间:
2011-7-24 23:02
[code=java]java中的for循环、foreach,while
public static void main(String[] args) {
List<Integer> map = new ArrayList<Integer>();
for (int i = 0; i < 100000; i++) {
map.add(i);
}
long currTime = System.currentTimeMillis();
//基本的for
int z = map.size();
for (int i = 0; i < z; i++) {
int tmp = map.get(i);
System.out.println(tmp);
}
//foreach
for (Integer integer : map) {
int tmp = integer;
System.out.println(tmp);
}
//while
int i = 0 ;
while(i<z){
int tmp = map.get(i);
System.out.println(tmp);
i++;
}
long time = System.currentTimeMillis() - currTime ;
System.out.println(time);
}
//材料记载foreach和while在效率上比for高,但是while有特殊的用途
比如wile(rs.next()){
''''''''''
}[/code]
[
本帖最后由 杨志罡 于 2011-07-24 23:05 编辑
]
作者:
王松朝
时间:
2011-7-24 23:03
普通的循环还需要一个作为循环次数的变量,增强行循环不再需要这个变量.
foreach,即增强型循环,主要用于数组,或实现了接口的类,因为这些数组或类的大小在循环的时候已经是确定的了,所以会比普通的循环少定义一个或多个变量.且方便的依次取出数组或类的原素。
int[] as={1,3,9};
for(int a:as){功能}
打个比方:
一间教室里有很多学生,你想和所有学生都谈谈,用for的话你先要知道有多少人,可能还需要一把凳子让学生坐;用foreach的话就没这么麻烦了,就用一把凳子,然后跟班长说让学生一个一个的过来谈话.
作者:
王松朝
时间:
2011-7-24 23:06
iterator接口
作者:
匿名
时间:
2011-7-24 23:27
标题:
关于增强型for循环
优点:
1.能使代码看起来更加简洁一些;
2.在泛型中有优势;
缺点:
1.集合遍历中,不方便对集合中的元素操作;
作者:
匿名
时间:
2011-7-24 23:28
for循环增强主要是针对数组和集合的,它能更简单的遍历数组和集合等对象。而常规的是对单个的环境变量来说的,比如:for(int i=0;i<10; i++);
而for循环增强格式为for(type 变量名:变量集合名)它,比如:
int [] integers={1,2,3,4};//建立数组
for(int i :integers);//开始遍历
作者:
匿名
时间:
2011-7-24 23:45
增强for循环是J2SE5.0的新特性,其语法格式是:for(type 迭代变量名:集合对象名(或数组名)){…}
迭代变量必须在for( )的括号中定义,集合必须是实现了Iterable接口的集合类
在增强的for循环中,我们不需要去检查数组的边界,不必担心数组下标越界,
这些都由增强的for循环替我们代劳了
例:
在J2SE5.0之前我们要求一个int数组中所有元素的和是这么写的:
int sum=0;
for(int i=0;数组名.length;i++)
{
sum+=数组名[i];
}
return sum;
现在我们可以用增强的for功能这样写:
for(int i;数组名) //迭代变量名可以任取
{
sum+=i;
}
在集合类上的应用更能发挥增强for的优势
例:
Map<String,Integer> maps=new HashMap<String,Integer>();
maps.put("one", 1);
maps.put("two", 2);
maps.put("three",3);
Set<Map.Entry<String, Integer>>entrySet=maps.entrySet();//HashMap并未实现Iterable接口,但它有一个方法entrySet() ,返回一个对应对象 maps的 、实现Set接口类的对象,因为set接口继承了Iterable接口,所以返回的这个对象的类,必实现了Iterable接口,此时,我们就可以通过
增强for进行迭代,得出HashMap类的对象maps里面的key、value
for(Map.Entry<String, Integer> m:entrySet)
{
System.out.println(m.getKey()+"="+m.getValue());
}
作者:
匿名
时间:
2011-7-25 01:02
增强型的for循环 优点主要体现在集合中,随便举个例子
比如对 set 的遍历
一般是迭代遍历:[code=java]Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}[/code]for循环遍历:[code=java] for (String str : set) {
System.out.println(str);
}[/code]这样在代码看起来就很简洁
[color=Red]
优点还体现在泛型 假如 set中存放的是Object[/color][code=java]Set<Object> set = new HashSet<Object>();[/code]for循环遍历:[code=java]for (Object obj: set) {
if(obj instanceof Integer){
int aa= (Integer)obj;
}else if(obj instanceof String){
String aa = (String)obj
}
........
}[/code][color=Red]如果你用Iterator遍历,那就晕了[/color]map list 也一样
[color=Red]唯一的缺点就是 在遍历 集合过程中,不能对集合本身进行操作[/color][code=java] for (String str : set) {
set.remove(str);//错误!
}[/code]
作者:
匿名
时间:
2011-7-25 13:00
普通的循环还需要一个作为循环次数的变量,增强行循环不再需要这个变量.
foreach,即增强型循环,主要用于数组,或实现了接口的类,因为这些数组或类的大小在循环的时候已经是确定的了,所以会比普通的循环少定义一个或多个变量.且方便的依次取出数组或类的原素。
增强型的for循环 优点主要体现在集合中
for循环遍历:查看打印?1.for (Object obj: set) {
2.
if(obj instanceof Integer){
3.
int aa= (Integer)obj;
4.
}else if(obj instanceof String){
5.
String aa = (String)obj
6.
}
7.
........
8.
}
作者:
马蒙蒙
时间:
2011-7-27 17:34
标题:
回复 楼主 的帖子
int sum;
for(int number:totalnumbers ){
sum+=number;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2