2014-09-11 3 views
0

Я хава список, когда я пересек его, это написание кодаTraverse проблемы производительности сбора Список

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

и это написание кода

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

Что лучше, почему?

+1

Ваш вопрос по существу является дубликатом http://stackoverflow.com/questions/6093537/for-loop-optimization –

ответ

0

Чтобы добавить точку к Жану, в двух для петель:

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

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

Позволяет сравнить ситуации:
case1:
Если элементы списка не будут изменяться, то есть не частое добавление и удаление, то второй цикл будет лучше, потому что вы принимаете размер список и поместить его в переменную и сравнить. Если в первом цикле каждый раз нужно вычислить размер списка.
Вариант 2:
Если элементы списка будут часто меняться (вставка и удаление более), то размер списка фиксированы не является хорошей идеей. Размер списка должен динамически вычисляться через функцию size() каждый раз. Таким образом, в этом случае первый цикл for лучше. Если вы хотите использовать второй цикл for, после внесения изменений в список, пересчитайте размер списка и снова сохраните в n, что является накладными расходами.

2

Поскольку вы перекручивание по коллекции, используйте для-каждый ...

for(Object o : list) 
{ 
    //treatment... 
} 

Что касается разницы между теми, кто вас в курсе, я уверен, что виртуальная машина будет оптимизировать его для вас в любом случае.

0

Это не имеет никакого значения. list.size() не нужно рассчитать

/** 
* Returns the number of elements in this list. 
* 
* @return the number of elements in this list 
*/ 
public int size() { 
    return size; 
} 
+0

Если вы используете ArrayList, fori - самый быстрый метод. Если вы используете LinkedList, foriter является самым быстрым методом. – isea

Смежные вопросы