List如何迭代,就像它是一个数组一样

时间:2013-07-29 04:33:00

标签: java list arraylist

我见过这样的代码:

List<String> listOfStrings = new ArrayList<>();
listOfStrings.add("A");
listOfStrings.add("B");

for(String txt: listOfStrings) {
 System.out.println(txt);
}

我没有看到ArrayList的内部代码或它的接口,因为我没有需要连接jar以便我可以看到源代码。

任何人都可以解释这是怎么回事?

好的,好的。我更新了问题....我想说清楚:我可以创建自己的数据结构,然后通过一些特殊的内部代码,用户也可以在我自己的数据结构上使用每个循环

9 个答案:

答案 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接口) 缺点是你无法以相反的顺序打印。