什么是增强for循环?
原来的for循环是这样子的:
for(int i=0;i<10;i++)
那我们来看一下增强for循环:
for(object a:x)//不只是object 数组存储的是什么类型的就填什么类型 x是数组或者集合
里面是Interator迭代器实现的
注意:遍历的时候不能用集合增删元素 只能通过迭代器进行操作
因为迭代器创建的时候会创建一个单链表 如果是通过集合来操作元素数量的话那么 实际的数量是变化了 可是迭代器创建的那个单链表却还是原来的样子 这样子 迭代器往下遍历的时候 就找不到实际的值
重点:
增强for循环的适用范围: 如果是实现了Iterable接口的对象或者是数组对象(包括int)都可以使用增强for循环。
//注意: Map集合没有实现Iterable接口,所以map集合不能直接使用增强for循环,如果需要使用增强for循环需要借助于Collection
// 的集合。
HashMap<String, String> map = new HashMap<String, String>();
map.put("001","张三");
map.put("002","李四");
map.put("003","王五");
map.put("004","赵六");
Set<Map.Entry<String, String>> entrys = map.entrySet();
for(Map.Entry<String, String> entry :entrys){
System.out.println("键:"+ entry.getKey()+" 值:"+ entry.getValue());
}
举例: 实现了Iterable接口的对象
package cn.itcast.jdk15;
import java.util.Iterator;
//自定一个类使用增强for循环
class MyList implements Iterable<String>{
Object[] arr = new Object[10];
int index = 0 ; //当前的指针
public void add(Object o){
arr[index++] = o; // 1
}
public int size(){
return index;
}
@Override
public Iterator<String> iterator() {
return new Iterator<String>() {
int cursor = 0;
@Override
public boolean hasNext() {
return cursor<index;
}
@Override
public String next() {
return (String) arr[cursor++];
}
@Override
public void remove() {
}
};
}
}
public class Demo3 {
public static void main(String[] args) {
MyList list = new MyList();
list.add("张三");
list.add("李四");
list.add("王五");
for(String item :list){
System.out.println(item);
}
}
}