«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Существует ли разница в производительности между использованием зала и итератора для сбора сбора в Java?

Существует ли разница в производительности между использованием зала и итератора для сбора сбора в Java?

Опубликовано в 2025-03-09
Просматривать:146

Is There a Performance Difference Between Using a For-Each Loop and an Iterator for Collection Traversal in Java?

для каждого цикла против итератора: эффективность в сборе Traversal

введение

при переселении коллекции в Java, выборе между использованием для использования иэ-образа. В этой статье исследуются различия в эффективности между этими двумя подходами.

for-e-each

, представленная в Java 5, For-E-of-Mepbre (также известный как усиленный для цикла) является комплексным и простым для чтения синтаксиса для итерации над поверхностями. Он использует итератор внутренне:

List a = new ArrayList();
for (Integer integer : a) {
  integer.toString();
}

iterator

итератор предоставляет стандартизированный интерфейс для итерации над коллекциями. Он позволяет управлять процессом обхода. for (iterator iterator = a.iterator (); iterator.hasnext ();) { Integer integer = iterator.next (); integer.toString (); }

List a = new ArrayList();
for (Iterator iterator = a.iterator(); iterator.hasNext();) {
   Integer integer = iterator.next();
   integer.toString();
}
сравнение эффективности

Для простого доступа только для чтения к коллекции практически нет различий в производительности между подходом и итератором. Внутренний цикл внутренне использует механизм итератора.

, однако, если использует традиционную петлю "C-стиль" с get (i):

for (int i = 0; i

for (int i = 0; i  2 

). Bytecode для обоих подходов:

для Each-goop

list a = new Arraylist (); для (целое число целого числа: a) { integer.toString (); }

aload 1 Invokeinterface java/util/list.iterator () ljava/util/iterator; Асторе 3 ...

iterator

List a = new ArrayList();
for (Integer integer : a) {
  integer.toString();
}
ALOAD 1
INVOKEINTERFACE java/util/List.iterator()Ljava/util/Iterator;
ASTORE 3
...

Как вы можете наблюдать, сгенерированный байт-код идентичен, что не указывает на штраф за производительность при использовании любого захода. Итератор предлагает преимущества только при работе с конкретными структурами данных или требующим пользовательского поведения итерации. Для простоты и читабельности, за свой счет, как правило, является предпочтительным выбором. ]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3