Java - Когда использовать Итераторы?

Я пытаюсь лучше понять, когда я должен и не должен использовать Итераторы. Мне, каждый раз, когда у меня есть потенциально большой объем данных для итерации через, я пишу Итератор для него. Если это также предоставляет себя интерфейсу Iterator, то это походит на победу.

Я читал немного, что существует много издержек с использованием Итератора.

Хороший пример того, где я использовал Итератор, состоял в том, чтобы выполнить итерации через набор сценариев SQL для выполнения одного запроса за один раз, читая его в, затем выполнив его.

Есть ли другой компромисс производительности, о котором я должен знать? Прежде чем я использовал итераторы, я считаю всю Строку команд SQL для выполнения в ArrayList и выполнение итерации через это. Если импорт является довольно большим (как для данных геолокации, то сервер имеет тенденцию увязать).

Walter

8
задан 1 April 2010 в 00:33
поделиться

2 ответа

Я думаю, что ваш вопрос заключается в том, когда вы должны "передавать" входные данные, а не загружать их все в память и обрабатывать. Это не совсем вопрос использования Iterator или нет, я думаю.

"Это зависит от ситуации", конечно, хотя в вашем примере похоже, что потоковая передача входных данных, а не загрузка всего в память - это явный выигрыш, так что итератор действительно нужен.

Преимущество загрузки в память обычно заключается в том, что код проще, и, возможно, вы получите некоторое преимущество от загрузки в память сразу больших кусков, а не чтения битов за раз. Преимущество "потоковой передачи" заключается в том, что вы ограничиваете требования к памяти и получаете связанную с этим производительность.

В качестве очень грубого эмпирического правила, я бы не загружал ничего подобного в память, если бы не был уверен, что это меньше 100K или около того.

9
ответ дан 5 December 2019 в 17:35
поделиться

Хорошим примером того, как я использовал Iterator, было перебор нескольких сценариев SQL для выполнения одного запроса за раз, считывая его, а затем выполняя.

В этом сценарии накладные расходы Iterator, вероятно, меньше, чем время, необходимое для выполнения запросов.

Перед тем, как использовать итераторы, я читал всю строку команд SQL для выполнения в ArrayList и перебирал ее. Если импорт довольно большой (например, для данных геолокации, то сервер имеет тенденцию зависать).

Есть ли конкретная причина, по которой вам нужно собрать их все в ArrayList? Вы можете просто выполнять их один за другим, читая инструкции.

Итераторы особенно подходят для случаев потоковой передачи, когда данные загружаются / создаются на лету / лениво. Они не требуют, чтобы данные были полностью в памяти заранее.

1
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: