Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / какой способ лучше / 11 сообщений из 11, страница 1 из 1
04.02.2014, 16:55
    #38549014
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        List<String> listTest = new ArrayList<>();
        
        for () {
            
            // делаем что-то
            listTest.clear();
            for () {

                // делаем что-то
                listTest.add(...);
            }
                }
 



или

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        List<String> listTest = null;         
        for () {
            
            // делаем что-то
            listTest = new ArrayList<>();
            for () {
                // делаем что-то
                listTest.add(...);
            }
            listTest.clear();
        }
 





Люблю галеры - работящий коллектив, романтика мужского труда. Стоишь на мостике в пене брызг и эдак поворотясь:
- Голубчик! Утроить количество ударов - Али-паша уходит...
...
Рейтинг: 0 / 0
04.02.2014, 16:58
    #38549022
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
        for () {            
            // делаем что-то
           List<String> listTest = new ArrayList<>();
            for () {
                // делаем что-то
                listTest.add(...);
            }
        }
 
...
Рейтинг: 0 / 0
04.02.2014, 17:00
    #38549026
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
Blazkowicz,
почему? В этомслучае напрягается сборщик мусора. Разве нет?
...
Рейтинг: 0 / 0
04.02.2014, 17:06
    #38549039
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
Maxiflyпочему?
Потому что scope переменной минимизирован.

MaxiflyВ этом случае напрягается сборщик мусора. Разве нет?
Вы уже померяли? Прогнали на тестах? Реально напрягся сборщик мусора?
Или все же имеет место быть преждевременная оптимизация ?
...
Рейтинг: 0 / 0
04.02.2014, 17:24
    #38549074
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
BlazkowiczMaxiflyпочему?
Потому что scope переменной минимизирован.
Гы. its depence...

Поскольку Конструктор ArrayList вызывается без параметров, то вызывающему уже пофиг на быстродействие.

Другими словами,

Если до clear и после количество добавленных элементов будет одинаковым, то clear предпочтительней (add будет идти бустрее).

Если нужно освободить память (массив ссылок) - то предпочтительней new ArrayList.
...
Рейтинг: 0 / 0
04.02.2014, 17:29
    #38549084
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
Сергей Арсеньев Гы. its depence...

It depends

Сергей Арсеньев Поскольку Конструктор ArrayList вызывается без параметров, то вызывающему уже пофиг на быстродействие.

Другими словами,

Если до clear и после количество добавленных элементов будет одинаковым, то clear предпочтительней (add будет идти бустрее).

Если нужно освободить память (массив ссылок) - то предпочтительней new ArrayList.
Угу, а если это действительно большой нагруженый цикл, то при переиспользовании списке, он может пережить Eden и улететь в Tenured, действительно напрягая при этом GC. А не просто сдохнуть в Eden так что никто и не заметит даже.

Другими словами, без актуальных измерений близких к боевым, всяческие гипотетические домыслы смысла не имеют.
...
Рейтинг: 0 / 0
04.02.2014, 17:44
    #38549111
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
Blazkowiczвсяческие гипотетические домыслы смысла не имеют.
+1
главное не сборщик, а чтобы не напрягся программист разгребая код)
...
Рейтинг: 0 / 0
04.02.2014, 17:57
    #38549128
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
Я бы сказал так: при большом внешнем цикле и маленьком внутреннем вариант с предварительным созданием списка отработает быстрее (например, 10000000:10), но с мизерным преимуществом. При этом да, будут созданы проблемы для сборщика мусора, так что полученное преимущество может потом аукнуться.
Вот о чем действительно стоит беспокоиться при большом внешнем цикле - если во внутреннем цикле используется итератор, то лучше его переписать на for (i=0;......)
...
Рейтинг: 0 / 0
04.02.2014, 18:23
    #38549185
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
ivanraВот о чем действительно стоит беспокоиться при большом внешнем цикле - если во внутреннем цикле используется итератор, то лучше его переписать на for (i=0;......)

Почему?
...
Рейтинг: 0 / 0
04.02.2014, 21:25
    #38549416
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
MaxiflyПочему?
Не совсем точно выразился, имелась в виду обработка массивов с применением итераторов.
Вот, например, такой метод:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
	Integer compute(Integer[][] a2) {
		Integer result = 0;
		for (Integer[] a1:a2) {
			for (Integer a: a1) {
				result += a;
			}
		}
		return result;
	}


Если подать на вход массив Integer[10][1000000], то во время выполнения будет создано 11 итераторов, а если массив Integer[1000000][10], то 1000001 итератор. Разница может быть очень существенной.
Поэтому такие циклы разворачивают короткой частью вперед. Но если характер вычислений не позволяет, то вместо итераторов используют обычные for(int i=0;...)
...
Рейтинг: 0 / 0
05.02.2014, 09:21
    #38549687
maxkar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
какой способ лучше
ivanraЕсли подать на вход массив Integer[10][1000000], то во время выполнения будет создано 11 итераторов,
Будет создано ровно 0 итераторов. Массивы итерируются именно по индесу, даже в enhanced for. Можете скомпилировать свой код и javap'ом его посмотреть.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / какой способ лучше / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]