Это не может быть очень эффективным.
Итерирование в памяти чертовски быстро.Кроме того, эффективность создания ArrayList
из 10 тыс. Элементов по сравнению с 10 ArrayList
с 1 тыс. Элементов каждый не будет так сильно отличаться.Итак, в заключение, вы, вероятно, должны сначала просто перейти к самой простой итерации.Скорее всего, это работает просто отлично.
Даже если у вас есть несколько элементов gazillion, вероятно, целесообразно в любом случае реализовать прямую итерацию для сравнения.В противном случае вы не знаете, сможете ли вы оптимизировать или замедлите это, делая что-то умное.
Сказав, что, если вы хотите оптимизировать последовательный доступ для чтения всех D, я бы поддерживал "индекс" снаружи.Индекс может быть LinkedList
, ArrayList
, TreeList
и т. Д. В зависимости от вашей ситуации.Например, если вы не уверены в длине индекса, возможно, стоит избегать ArrayList
.Если вы хотите эффективно удалить случайные элементы, используя ссылку на этот элемент, OrderedSet
может быть намного лучше, чем список и т. Д.
Когда вы делаете это, вы должны беспокоиться о согласованности индекса и фактических ссылокв ваших классах.Т.е. больше сложности = больше места, чтобы скрывать ошибки.Так что, если вы не сочтете это необходимым в ходе тестирования производительности, на самом деле не стоит пытаться оптимизировать.
(кстати, избегание создания экземпляров новых объектов коллекции вряд ли сделает вещи намного быстрее, если вы не говорите о EXTREME high-Выполнение кода. Создание экземпляров объектов в современных JVM занимает всего несколько десятков наносекунд или что-то в этом роде. Кроме того, вы можете по ошибке использовать ArrayList, имеющий небольшую начальную длину, или что-то еще, что еще хуже)