参考一些博客整理的资料笔记,以备后续查看。
目录
1.2 Collection for( Iterator i=kindsList.iterator(); i.hasNext(); )
3.1 使用和 要被遍历的数组 中的元素 相同类型的 循环变量
3.2 使用和 要被遍历的Collection 中的元素 相同类型的循环变量
4 循环变量的类型 可以是要被遍历的对象中的元素的 上级类型
4.2 使用能和 要被遍历的对象中的元素的类型 自动转换的类型的 循环变量
1 常用的几种方法
1.1 for(; ; )
这个是最常用的方法
// 建立一个数组
int[] data = new int[]{1,2,3,4};
// 开始遍历
for(int i=0;i<data.length;i++){
int num = data[i];
System.out.print(num+" ");
}
1.2 Collection for( Iterator i=kindsList.iterator(); i.hasNext(); )
java.util.Collection 是一个 集合接口(集合类的一个顶级接口),它提供了对集合对象进行基本操作的通用接口方法。
Collection接口在Java 类库中有很多具体的实现,Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
其中 Iterator 就是这个接口中的一种方法,叫 迭代器。
i.hasNext() 方法返回值是 boolean类型,若为 true 则表示迭代器下一个有值,否则表示迭代完成;
i.next() 返回值是一个 object类型,表示 取出迭代器下一个值并赋值给“=”之前
代码示例
String[] stringData = new String[]{"A","B","C","D"};
Collection stringList = java.util.Arrays.asList(stringData);
// 开始遍历
for(Iterator itr = stringList.iterator();itr.hasNext();){
Object str = itr.next();
System.out.print(str+" ");
}
1.3 for( : )
for(int i:a)解释是:先设置一个与 a数组 里的元素相同的变量,这个变量先等于a数组的第一个元素,然后进入循环体,第二次循环就等于a数组的第二个元素,进入循环体,以此类推
代码示例:
// 建立一个数组
int[] data = new int[]{1,2,3,4};
// 开始遍历
for(int i:data){
System.out.print(i+" ");
}
String[] stringData = new String[]{"A","B","C","D"};
Collection stringList = java.util.Arrays.asList(stringData);
// 开始遍历
for(Object str:stringList){
System.out.print(str+" ");
}
2 防止在循环体里修改循环变量
2.1 禁止重新赋值
int[] data = new int[]{1,2,3,4};
for(final int i:data){
i = i/2; /* 编译时出错 */
}
这只是禁止了对循环变量进行重新赋值。
给循环变量的属性赋值
,或者
调用能让循环变量的内容变化的方法
,是不被禁止的。
2.2 允许修改状态
Random[] randoms = new Random[]{new Random(1),new Random(2),new Random(3)};
for(final Random r:randoms){
r.setSeed(4); /* 将所有Random对象设成使用相同的种子 */
System.out.print(r.nextLong()+" "); /* 种子相同,第一个结果也相同 */
}
// 运行结果:-4969378402838085704 -4969378402838085704 -4969378402838085704
3 类型相容问题
3.1 使用和 要被遍历的数组 中的元素 相同类型的 循环变量
int[] data = new int[]{1,2,3,4};
// 开始遍历
for(int i:data){
System.out.print(i+" ");
}
3.2 使用和 要被遍历的Collection 中的元素 相同类型的循环变量
Collection<String> stringData = new ArrayList<String>();
stringData.add("A");
stringData.add("B");
stringData.add("C");
stringData.add("D");
for(String str:stringData){
System.out.print(str+" "); /* 依次输出“A”、“B”、“C”、“D” */
}
4 循环变量的类型 可以是要被遍历的对象中的元素的 上级类型
例如,用 int型 的循环变量来遍历一个 byte[]型 的数组,用 Object型 的循环变量来遍历一个Collection< String>(全部元素都是String的Collection)等
注意,这里说的 元素的类型,是 由要被遍历的对象的决定 的――如果它是一个 Object[]型 的数组,那么元素的类型就是Object,即使里面装的都是String对象也是如此
4.1 使用要被遍历的对象中的元素的 上级类型的 循环变量
String[] stringData = new String[]{"A","B","C","D"};
Collection stringList = java.util.Arrays.asList(stringData);
// 开始遍历
for(Object str:stringList){
System.out.print(str+" ");
}
4.2 使用能和 要被遍历的对象中的元素的类型 自动转换的类型的 循环变量
一般写法
int[] data = new int[]{1,2,3,4};
for(int i:data){
System.out.print(i+" ");
}
也可以这么写
int[] data = new int[]{1,2,3,4};
// 开始遍历
for(Integer i :data){
System.out.print(i+" ");
}