1 加强型for循环概述
从 JDK 1.5起,增加了加强型for循环的用法,加强型for循环在操作数组和集合方面有很大方便性。虽然加强型for循环有很大便利性,但是加强型for循环也有一定局限性。表现在如下几个方面:
(1)只能对数组元素进行顺序访问。
(2)只能访问集合中的所有元素。
(3)循环中没有当前索引,因此无法对指定元素进行操作。
2 加强型for循环的处理(实现)
加强型for循环只是在基本for循环的基础上做了一层简单的包装而已,其底层也是通过基本for循环来实现的。
如下:
package chapter1;
import java.util.HashSet;
import java.util.Set;
import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;
public class MysSet<E> {
private Set<E> ids = new HashSet<E>();
public void addIds(E id) {
ids.add(id);
}
public boolean removeId(E id) {
return ids.remove(id);
}
public static void main(String[] args) {
MysSet<String> set = new MysSet<String>();
set.addIds("9011");
set.addIds("9022");
set.addIds("9033");
for (String str : set) {
System.out.println(str);
}
}
}
package chapter1;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class MysSet<E> implements Iterable<E> {
private Set<E> ids = new HashSet<E>();
public void addIds(E id) {
ids.add(id);
}
public boolean removeId(E id) {
return ids.remove(id);
}
public Iterator<E> iterator() {
return ids.iterator();
}
public static void main(String[] args) {
MysSet<String> set = new MysSet<String>();
set.addIds("9011");
set.addIds("9022");
set.addIds("9033");
for (String str : set) {
System.out.println(str);
}
}
}
程序运行结果
9011
9022
9033
小结:如果加强型for循环处理的不是数组类型,那么会转换为去调用加强型for循环右侧变量的iterator()方法,而该方法是在iterable中声明的,因此右侧的变量必须是数组类型或者iterable类型。从处理方式上来看,加强型for循环在处理集合类(确切说是iterable类型的元素时),底层也是基本型for循环实现的。
3加强型for循环总结
(1) 加强型for循环的右侧的变量(即冒号后面的集合)必须为数组类型或者iterable类型。
(2) 底层是依赖基本型for循环来实现的。