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表单的基本语句:Run Code Online (Sandbox Code Playgroud)for (I #i = Expression.iterator(); #i.hasNext(); ) { VariableModifiersopt Type Identifier = #i.next(); Statement }
#i编译器生成的标识符在何处是与增强for语句发生时的范围(第6.3节)中的任何其他标识符(编译器生成的或其他标识符)不同的标识符.