增强for遍历的原理是什么?冒号右边允许哪些类型的实体类?
@Test public void m1(){
HashMap<String,String> hashMap=new HashMap<>();
hashMap.put("a", "jack");
hashMap.put("b","alice");
for(Map.Entry<String,String> entry:hashMap.entrySet()){
System.out.println(entry.getKey()+"--"+entry.getValue());
}
}
如题,学习遍历HashMap时想到的,老师只说for循环能遍历集合,但我想知道具体是哪些类型的集合可以遍历?还是说只要实现Collection接口都能遍历?
回答:
自定义一个什么接口都没实现的对象,产生一个实例用到 for(:)
中去,就会看到错误消息
这个消息告诉你只有数组和 Iterable 可以放在冒号右边(称为可迭代)。
看 Java API 文档,可以发现 Collection 接口是从 Iterable 继承的。所以只要实现了 Collection 的类都是 Iterable,可以迭代。
回答:
对于Java中的集合,只要实现了Iterable接口,就可以使用foreach循环或者迭代器进行遍历。Iterable接口继承自java.util.Collection,因此所有实现了Collection接口的集合类都可以遍历。包括但不限于ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。需要注意的是,Map接口不继承自Collection接口,因此遍遍历Map需要使用其keySet()、values()或者entrySet()方法获取其键、值或键值对的集合,然后再进行遍历。
回答:
增强for循环,是java提供的语法糖,等同于迭代器模式的for循环
Iterator it = obj.iterator();while(it.hasNext()){
do something with it.next()
}
所以本质上实现了迭代器接口(Iterable::iterator())的对象,都支持增强for循环。
像Collection Framework全家,数组,都可以
以上是 增强for遍历的原理是什么?冒号右边允许哪些类型的实体类? 的全部内容, 来源链接: utcz.com/p/945096.html