黑马程序员技术交流社区
标题:
关于下面的for循环 请指点
[打印本页]
作者:
曹文涛
时间:
2011-8-23 22:45
标题:
关于下面的for循环 请指点
public class GenericsDemo30{
public static void main(String args[]){
Integer i[] = fun1(1,2,3,4,5,6) ; // 返回泛型数组
fun2(i) ;
}
public static <T> T[] fun1(T...arg){ // 接收可变参数
return arg ; // 返回泛型数组
}
public static <T> void fun2(T param[]){ // 输出
System.out.print("接收泛型数组:") ;
for(T t:param){
System.out.print(t + "、") ;
}
}
};
新手 学第一遍 刚学到泛型 看到上面的那个for循环有点不解 它是怎么个实现过程呀?:)
作者:
匿名
时间:
2011-8-23 22:56
for(T t:param){
System.out.print(t + "、") ;
}
数组里面的位置 值
0 1 <------>赋值给变量t 输出 :System.out.print(t) 进入下一步
1 2 <------>赋值给变量t 输出 :System.out.print(t) 进入下一步
2 3 .....
3 4 ....
4 5<------>赋值给变量t 输出 :System.out.print(t) 已经到达最大索引位置,结束!
作者:
匿名
时间:
2011-8-23 22:57
建议 楼主可以使用 断点跟踪 程序执行过程 一目了然
作者:
匿名
时间:
2011-8-23 23:10
for增强循环.....一个特殊的用法,主要用于遍历集合,不用搞个iteator来迭代。。。
集合的实现过程就是编译器背后帮你搞到一个iteator迭代器,给你自动迭代。
迭代的时候不能remove。。。要不迭代器会报错还是怎么的。。。
一般数组的实现过程和for(int i=0;i<xx.length;i++)一样
作者:
匿名
时间:
2011-8-24 00:09
在编译期间,J2SE 1.5的编译器会把这种形式的for循环,看成是对应的传统形式,举个例子
int[ ] arr = new int[ ] {1, 2, 3, 4, 5};
增强for循环的写法:
for (int i : arr) {
System.out.println(i);
}
这种写法在jdk1.5的编译器的内部会把它转成下面代码的形式进行处理
for (int i = 0; i < arr.length; i++) {
System.out.println(i);
}
所以只要按照这种形式理解就行了,增强for循环只是使我们的代码更加的简洁,不过它无法操作迭代变量中的特定元素,因为它隐藏了迭代器,所以如果想操作特定元素,还是要用普通的迭代方法
作者:
匿名
时间:
2011-8-24 00:20
谢谢 不过这 迭代器 不了解
作者:
匿名
时间:
2011-8-24 09:14
你可以把迭代器理解成是一个指针,每次循环都指向下一个变量,不知道你有没有接触过JDBC,跟JDBC中的ResultSet很类似
作者:
匿名
时间:
2011-8-29 16:00
迭代器 暂且理解为一条条往下执行
作者:
李叶
时间:
2011-8-29 18:33
是的,for(T t : param){}这种格式就是个增强的循环
举个例子说明吧:
假设有一个这样的for循环:
for (String str : strArray) {
System.out.println(str);
}
如果strArray是一个数组类型的对象的话,这个for循环就等同于:
for (int i=0; i<strArray.length; i++) {
String str = strArray[ i ];
System.out.println(str);
}
如果strArray是一个List类型的对象的话,这个for循环就等同于:
for (int i=0; i<strArray.size(); i++) {
String str = strArray.get(i);
System.out.println(str);
}
这两个普通的for循环能看懂吧?
它们的作用都是从一个数组或者集合中依次取出每条记录,然后再对这条记录进行操作
这种把数组和集合中的元素依次取出的操作,我们在这里暂且把它称之为“遍历”吧
然后,再仔细观察下这两个普通的for循环
对数组的遍历,使用的循环条件是i<strArray.length,取出元素的方式是str = strArray[ i ];
而对集合的遍历使用的循环条件是i<strArray.size(),取出元素的方式是str = strArray.get(i);
所以,很容易可以看出,如果使用普通的for循环,那么对数组的遍历和对List的遍历的代码是有区别的
下面再来看一下这个增强的for循环
由于增强的for循环它的表现形式是for(String str: strArray);
它表示的含义就是:从strArray中依次取出每条记录,并将其保存到str中
这样的好处是,无论strArray是数组还是集合,它都会自动去选择如何对strArray进行遍历
这样无论是对数组还是集合进行遍历,代码就都没有任何区别了,既简化了操作,又降低了程序复杂度
不知道这样你能不能看懂~
[
本帖最后由 李叶 于 2011-08-29 18:37 编辑
]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2