Iterator.hasNext和for-each循环之间是否存在任何关系

NIV*_*GAR 3 java foreach iterator list jprofiler

JProfiler用于分析我的应用程序,因为它是一个巨大的应用程序,所以我非常了解它的性能和效率.
这花了太长时间,所以我更换所有Iterator.hasNext,for-each但当我在JProfilers CPU视图中看到它显示我Iterator.hasNext调用的方法我正在使用for-each.
为什么这样?这两者之间有什么关系吗?这是示例代码:

    List<Map<String, Object>> mapList = jdbcTemplate
                        .queryForList(MAP.SELECT_ALL);
                for (Map<String, Object> map : mapList) {
            list.add(fillPreferenceMaster(preferenceMasterMap));
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 10

是的,增强for语句使用Iterator了可迭代集合的底层,请参阅JLS的第14.14.2节:

如果Expression的类型是子类型Iterable,那么让成为表达式Expression的类型.iterator().增强for语句等同于for表单的基本语句:

for (I #i = Expression.iterator(); #i.hasNext(); ) {
        VariableModifiersopt Type Identifier = #i.next();
   Statement
}
Run Code Online (Sandbox Code Playgroud)

#i编译器生成的标识符在何处是与增强for语句发生时的范围(第6.3节)中的任何其他标识符(编译器生成的或其他标识符)不同的标识符.