我见过这样的代码:
List<String> listOfStrings = new ArrayList<>();
listOfStrings.add("A");
listOfStrings.add("B");
for(String txt: listOfStrings) {
System.out.println(txt);
}
我没有看到ArrayList的内部代码或它的接口,因为我没有需要连接jar以便我可以看到源代码。
任何人都可以解释这是怎么回事?
好的,好的。我更新了问题....我想说清楚:我可以创建自己的数据结构,然后通过一些特殊的内部代码,用户也可以在我自己的数据结构上使用每个循环答案 0 :(得分:2)
此for子句执行此操作:
for(T item: Iterable<T>)
第一部分(T item
)用于属于任何实现Iterable
的类的元素(第二部分))
它实际上不是ArrayList
功能,但您可以使用任何Iterable
类进行此操作。
答案 1 :(得分:2)
因为在内部它被转换为集合的迭代器。
这个for-each循环,
for (type var : coll) {
body-of-loop
}
将转换为以下形式:
for (Iterator<type> iter = coll.iterator(); iter.hasNext(); ) {
type var = iter.next();
body-of-loop
}
答案 2 :(得分:1)
在implicit iterator
集合上使用iterable
。它更具可读性和清洁性。只要你不想重组(删除或交换元素),这个集合就是一个不错的选择。
答案 3 :(得分:1)
他们在Java 5中添加了这个。它被称为for-each loop。它是使用迭代器循环遍历集合的简写。
答案 4 :(得分:1)
这是因为ArrayList implements iterable
答案 5 :(得分:1)
这是一个for-each循环。
您的代码的另一个表示如下。它可以帮助你理解
for(int i = 0; i < listOfStrings.size(); i++) {
System.out.println(listofStrings.get(i));
}
答案 6 :(得分:0)
for each loop内部转换为
for(Iterator<String> i = listOfStrings.iterator();
i.hasNext(); ) {
String txt = i.next();
System.out.println(txt);
}
答案 7 :(得分:0)
根据Docs增强的for语句相当于编译后的基本for语句
例如:
List<? extends Integer> l = ...
for (float i : l){
}
编译后转换为此表单
for (Iterator<Integer> #i = l.iterator(); #i.hasNext(); ) {
float #i0 = (Integer)#i.next();
}
答案 8 :(得分:0)
它适用于每个循环,即(增强循环)
for(T item: Iterable<T>)
内部使用
for(int i = 0; i < listOfStrings.size(); i++) {
System.out.println(listofStrings.get(i));
}
这最适合Collections和Array(实现Iterable接口) 缺点是你无法以相反的顺序打印。