2014-02-15 2 views
-1

У меня есть эти три коллекции в Java:Какая из этих петель более эффективна?

ArrayList<Integer> list1 = new ArrayList<Integer>(6000); 
ArrayList<Integer> list2 = new ArrayList<Integer>(6000); 
ArrayList<Integer> list3 = new ArrayList<Integer>(6000); 

Что является более эффективным проходным и установить на 0?

for(int i =0; i < rHist.size(); i++) { 
    list1.set[i] = 0; 
    list2.set[i] = 0; 
    list3.set[i] = 0; 
} 

Или это?

for (int n : list1) { 
    n = 0; 
} 


for (int n : list2) { 
    n = 0; 
} 


for (int n : list3) { 
    n = 0; 
} 

Благодаря

+3

Вариант 1) Имеет ли не компилируется; Вариант 2) не устанавливает содержимое списка в ноль. – qqilihq

+3

Не думайте о микро-оптимизации. Они не имеют значения. Начните с компиляции кода, затем исправьте. –

+0

oops, извините, моя ошибка – user2891805

ответ

1

Как уже упоминалось в комментариях, оба из варианты не достигают цели, которую вы указали. При этом лучше смотреть на читаемый, понятный и короткий код и воздерживаться от методов, приведенных в API коллекций. Нечто подобное заполняет список с 6000 копий нулей:

List<Integer> list = Collections.nCopies(6000, 0); 

Если вам нужно мутировать список после этого, вам нужно обернуть его в изменяемый список так:

List<Integer> list = new ArrayList<Integer>(Collections.nCopies(6000, 0)); 
0

Первый из них лучше, потому что вы зацикливание один раз вместо трех, если вы положите размер 6000 в петле, и набор должен выглядеть следующим образом list1.set(i,0) вместо list1[i]=0

если вы декомпилированы как их uisng javap -c "appname" позволяет предположить, что они находятся под основным, вы можете увидеть вашу собственную личность что происходит

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