Это не может быть очень эффективным.
Итерация в памяти происходит чертовски быстро. Кроме того, эффективность создания ArrayList
из 10 тыс. элементов по сравнению с созданием 10 ArrayList
с 1 тыс. элементов каждый не будет сильно отличаться. Итак, в заключение, вы, вероятно, должны сначала просто пойти с самой простой итерацией. Скорее всего, это работает просто отлично.
Даже если у вас есть миллион элементов, вероятно, будет разумно реализовать прямую итерацию в любом случае для сравнения. В противном случае вы не знаете, можете ли вы оптимизировать или замедляете работу, делая вещи умно.
Сказав это, если вы хотите оптимизировать последовательный доступ для чтения ко всем D, я бы сохранил «индекс» снаружи. Индекс может быть LinkedList
, ArrayList
, TreeList
и т. д. в зависимости от вашей ситуации. Например, если вы не уверены в длине индекса, вероятно, будет разумнее избегать ArrayList
. Если вы хотите эффективно удалять случайные элементы, используя ссылку на этот элемент, OrderedSet
может быть намного лучше, чем список и т. д.
Когда вы делаете это, вам нужно беспокоиться о согласованности индекса и фактических ссылок в ваших классах. т.е. больше сложности = больше места для скрытия ошибок. Таким образом, если вы не сочтете это необходимым с помощью тестирования производительности, действительно не рекомендуется пытаться оптимизировать.
(Кстати, отказ от создания экземпляров новых объектов коллекции вряд ли ускорит работу, если только вы не говорите об ЭКСТРЕМАЛЬНО высокопроизводительном коде. Создание объектов в современных JVM занимает всего несколько десятков наносекунд или что-то в этом роде. Кроме того, вы можете по ошибке использовать ArrayList, имеющий небольшая начальная длина или что-то в этом роде и усугубляет ситуацию)
person
Enno Shioji
schedule
17.05.2011