Я пытаюсь лучше понять, когда я должен и не должен использовать Итераторы. Мне, каждый раз, когда у меня есть потенциально большой объем данных для итерации через, я пишу Итератор для него. Если это также предоставляет себя интерфейсу Iterator, то это походит на победу.
Я читал немного, что существует много издержек с использованием Итератора.
Хороший пример того, где я использовал Итератор, состоял в том, чтобы выполнить итерации через набор сценариев SQL для выполнения одного запроса за один раз, читая его в, затем выполнив его.
Есть ли другой компромисс производительности, о котором я должен знать? Прежде чем я использовал итераторы, я считаю всю Строку команд SQL для выполнения в ArrayList и выполнение итерации через это. Если импорт является довольно большим (как для данных геолокации, то сервер имеет тенденцию увязать).
Walter
Я думаю, что ваш вопрос заключается в том, когда вы должны "передавать" входные данные, а не загружать их все в память и обрабатывать. Это не совсем вопрос использования Iterator
или нет, я думаю.
"Это зависит от ситуации", конечно, хотя в вашем примере похоже, что потоковая передача входных данных, а не загрузка всего в память - это явный выигрыш, так что итератор действительно нужен.
Преимущество загрузки в память обычно заключается в том, что код проще, и, возможно, вы получите некоторое преимущество от загрузки в память сразу больших кусков, а не чтения битов за раз. Преимущество "потоковой передачи" заключается в том, что вы ограничиваете требования к памяти и получаете связанную с этим производительность.
В качестве очень грубого эмпирического правила, я бы не загружал ничего подобного в память, если бы не был уверен, что это меньше 100K или около того.
Хорошим примером того, как я использовал Iterator, было перебор нескольких сценариев SQL для выполнения одного запроса за раз, считывая его, а затем выполняя.
В этом сценарии накладные расходы Iterator, вероятно, меньше, чем время, необходимое для выполнения запросов.
Перед тем, как использовать итераторы, я читал всю строку команд SQL для выполнения в ArrayList и перебирал ее. Если импорт довольно большой (например, для данных геолокации, то сервер имеет тенденцию зависать).
Есть ли конкретная причина, по которой вам нужно собрать их все в ArrayList? Вы можете просто выполнять их один за другим, читая инструкции.
Итераторы особенно подходят для случаев потоковой передачи, когда данные загружаются / создаются на лету / лениво. Они не требуют, чтобы данные были полностью в памяти заранее.