I was using JProfiler  for profiling of my application, as it is a huge application so I am very aware of its performance and efficiency.     It was taking too long so I replace all Iterator.hasNext  with for-each  but when I am seeing in the JProfilers CPU view it is showing me Iterator.hasNext  method called where I am using for-each  .   Why does so? Is there any relation between these two? Here is the example code : List<Map<String, Object>> mapList = jdbcTemplate                         .queryForList(MAP.SELECT_ALL);                 for (Map<String, Object> map : mapList) {             list.add(fillPreferenceMaster(preferenceMasterMap)); }