1 foreach循环本质上是迭代器遍历,简化了迭代器遍历的书写方式
2 适用于实现了Iterable接口的对象或者数组对象
3 格式为:for(数据类型 变量名:循环目标){
循环主体
}
迭代器遍历:
Java提供给了一个公共的取出元素的方式,叫迭代器 描述迭代器的接口:java.util.interator
接口中的方法:hsanext() 返回值为Boolean类型:true为还有元素可以迭代,false为没有了
next() 返回迭代的下一个元素。
迭代器是一个接口,需要找到迭代器的实现类,迭代器的实现类是每个集合的内部类
在Collection接口中有一个方法: iterator方法返回的就是迭代器
迭代器的使用步骤:
1.创建集合对象,往集合中添加元素
2.使用集合中的方法iterator获取迭代器的实现类对象,使用Iterator接口接收(多态)
3.使用iterator中的方法hasNext和next方法进行迭代,取出集合中的元素
代码示例:
public static void main(String[] args) {
//创建集合对象,往集合中添加元素
HashSet<String> set = new HashSet<>();set.add("张三");
set.add("李四");
set.add("王五");
//使用集合中的方法iterator获取迭代器的实现类对象,使用Iterator接口接收(多态)
Iterator it =set.iterator();
//使用iterator中的方法hasNext和next方法进行迭代,取出集合中的元素
while(it.hasNext){
String s= it.next();
system.out.println(s)
}
//foreach循环
for(String it:set){
system.out.println(it)
}
}
foreach缺点:
1 不能对集合进行增删操作
foreach循环底层也是使用的迭代器,不过获取迭代器是由jvm完成,不需要我们获取迭代器而已,所以在使用foreach循环变量元素的过程中不准使用集合对象对集合的元素个数进行修改。
for(String it:set){
system.out.println(it)
remove(it)//此处remove是错误的,不允许对集合元素个数修改
}
2 作用范围 必须实现iterable(如何对一个map集合使用增强for循环)
map集合没有实现iterable接口,所以不能直接使用 map集合有个entryset方法 返回类型是set set实现了iterable
代码:
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();//map集合的entryset方法
for(Map.Entry<String, String> entry : entrys){
System.out.println("键:"+ entry.getKey()+" 值:"+ entry.getValue());
}