增强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

回到顶部