Ответ 1
В первом примере map.values()
будет оцениваться один раз. Согласно Раздел 14.4.2 Спецификации Java Language, это эквивалентно:
for (Iterator<Object> i = map.values().iterator(); i.hasNext(); ) {
Object object = i.next();
// do something with object
}
Во втором случае aList.size()
будет вызываться каждый раз при проверке теста. Для удобства чтения было бы лучше записать его как:
for (Object object : aList) {
// do something with object
}
Однако, для Android-документов, это будет медленнее. Предполагая, что вы не меняете размер списка внутри цикла, самый быстрый другой способ заключается в том, чтобы вытащить размер списка перед циклом:
final int size = aList.size();
for (int i = 0; i < size; i++)
{
object = aList.get(i);
//do something with i
}
Это будет значительно быстрее (привязанные к вышеперечисленным приложениям Android в 3 раза), если aList
окажется ArrayList
, но скорее всего будет медленнее (возможно, много) для LinkedList
. Все зависит от того, какой тип класса List
aList
есть.