Java 如何像数组一样迭代列表

Java 如何像数组一样迭代列表,java,list,arraylist,Java,List,Arraylist,我见过这样的代码: List<String> listOfStrings = new ArrayList<>(); listOfStrings.add("A"); listOfStrings.add("B"); for(String txt: listOfStrings) { System.out.println(txt); } List listofstring=new ArrayList(); 添加(“A”); 添加(“B”); for(字符串txt:ListO

我见过这样的代码:

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

for(String txt: listOfStrings) {
 System.out.println(txt);
}
List listofstring=new ArrayList();
添加(“A”);
添加(“B”);
for(字符串txt:ListOfstring){
System.out.println(txt);
}
我还没有看到ArrayList的内部代码或它的接口,因为我不需要附加jar以便查看源代码

谁能解释一下这是怎么可能的


好,好。我更新了问题。。。。我想澄清一下:我是否可以创建自己的数据结构,然后通过一些特殊的内部代码,用户也可以在自己的数据结构上为每个循环使用
隐式迭代器
,因为每个循环都在
iterable
集合上使用
隐式迭代器。它更具可读性和更清晰。只要您不想重新构造(删除或交换元素),集合就是一个不错的选择。

他们在Java5中重新添加了这个。这叫一个。它是使用迭代器在集合上循环的缩写。

之所以有效,是因为ArrayList

This for子句执行以下操作:

for(T item: Iterable<T>)
for(T项:Iterable)
第一部分(
T item
)用于属于实现
Iterable
(第二部分))的任何类的元素


它实际上不是一个
ArrayList
特性,但是您可以使用任何
Iterable
类来实现它。

因为它在内部被转换为集合的迭代器

对于每个循环

for (type var : coll) {
    body-of-loop
}
将转换为以下形式:

for (Iterator<type> iter = coll.iterator(); iter.hasNext(); ) {
    type var = iter.next();
    body-of-loop
} 
for(迭代器iter=coll.Iterator();iter.hasNext();){
类型var=iter.next();
环体
} 
这是一个循环

下面是代码的另一种表示形式。这可能有助于你理解

for(int i = 0; i < listOfStrings.size(); i++) {
 System.out.println(listofStrings.get(i));
}
for(int i=0;i
内部转换为

for(Iterator<String> i = listOfStrings.iterator(); 
                                                  i.hasNext(); ) {
  String txt = i.next();
  System.out.println(txt);
}
for(迭代器i=listOfStrings.Iterator();
i、 hasNext();){
字符串txt=i.next();
System.out.println(txt);
}
根据增强的for语句,编译后的for语句相当于基本的for语句
例如:

List它适用于每个循环ie(针对循环增强)

for(T项:Iterable)
内部使用

for(int i = 0; i < listOfStrings.size(); i++) {
 System.out.println(listofStrings.get(i));
}
for(int i=0;i
这最适合于集合和数组(实现Iterable接口)
缺点是你不能按相反的顺序打印。

在谷歌搜索增强的循环。关于更新的问题,也请回答我。谢谢。我已经得到了我想知道的答案。难以忍受。谢谢。你想为迭代集合创建自定义功能吗?@Veera,不,只是想提供更干净、更简单、不冗长的迭代集合的方法。哦。所以我们需要扩展Iterable?如果你想创建你自己的Iterable对象,是的;ArrayList和许多其他类已经完成了这项工作,因此您实际上不必做额外的工作。(顺便说一句,你也可以在上面使用数组)耶。你的答案实际上也满足了我的问题,但我想我最多只能给一个答案打分。但是谢谢。我明白了。请解释一下否决票,这样我可以从错误中吸取教训。
 for (Iterator<Integer> #i = l.iterator(); #i.hasNext(); ) {
     float #i0 = (Integer)#i.next();
 }
for(T item: Iterable<T>)
for(int i = 0; i < listOfStrings.size(); i++) {
 System.out.println(listofStrings.get(i));
}