Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java for-each循环在遍历列表的方式上是否与常规for循环不同?_Java_For Loop_Foreach - Fatal编程技术网

Java for-each循环在遍历列表的方式上是否与常规for循环不同?

Java for-each循环在遍历列表的方式上是否与常规for循环不同?,java,for-loop,foreach,Java,For Loop,Foreach,考虑以下示例中的ArrayList列表 我很好奇for-each循环在“幕后”是如何工作的。传统的for循环通过数字索引访问列表元素,如下所示: for(int i = 0; i < list.size(); i++) 它在幕后使用迭代器,而不是传统的索引 for(String name: names){ } 相当于 for (Iterator<String> i = names.iterator(); i.hasNext();){ } for(迭代器i=names.I

考虑以下示例中的
ArrayList列表

我很好奇for-each循环在“幕后”是如何工作的。传统的for循环通过数字索引访问列表元素,如下所示:

for(int i = 0; i < list.size(); i++)

它在幕后使用
迭代器
,而不是传统的索引

for(String name: names){
}
相当于

for (Iterator<String> i = names.iterator(); i.hasNext();){

}
for(迭代器i=names.Iterator();i.hasNext();){
}
另请参见


增强的for循环是基于迭代器的列表访问,而不是基于索引的。它的工作原理如下:

Iterator<String> itr = list.iterator();
while(itr.hasNext()) {
  String item = itr.next():
  //your code
}
Iterator itr=list.Iterator();
while(itr.hasNext()){
String item=itr.next():
//你的代码
}

增强的for循环是使用迭代器作为基本for循环实现的

见:

增强型for语句的含义通过翻译为 一个基本的for语句,如下所示:

  • 如果表达式类型是
    Iterable
    的子类型,则翻译如下

    如果表达式的类型是某个类型参数X的
    Iterable
    的子类型,那么让我成为类型
    java.util.Iterator
    ; 否则,让我成为原始类型
    java.util.Iterator

增强型for语句相当于以下形式的基本for语句:

for (I #i = Expression.iterator(); #i.hasNext(); ) {
    VariableModifiersopt TargetType Identifier =
        (TargetType) #i.next();
    Statement
}

它使用标准迭代器。它不知道迭代列表可以用get()完成。它只对数组使用索引查找。
for (I #i = Expression.iterator(); #i.hasNext(); ) {
    VariableModifiersopt TargetType Identifier =
        (TargetType) #i.next();
    Statement
}