Это случай преждевременной неоптимизации :-). Вы никогда не должны делать что-то, потому что вы думаете, что это будет лучше / быстрее / сделает вас счастливее.
ArrayList имеет дополнительные накладные расходы, если вам не нужны дополнительные функции ArrayList, тогда использовать ArrayList расточительно.
Также для некоторых вещей, которые вы можете делать со списком, есть класс Arrays, что означает, что ArrayList предоставил больше функциональных возможностей, чем Arrays, и это менее верно. Теперь их использование может быть медленнее, чем использование ArrayList, но для уверенности его необходимо профилировать.
Вы никогда не должны пытаться сделать что-то быстрее, не будучи уверенным, что это медленно с самого начала ... что подразумевает, что вы должны продолжать и использовать ArrayList, пока не обнаружите, что они являются проблемой, и замедлить работу программы. Однако в этом также должен быть здравый смысл - ArrayList накладные расходы, накладные расходы будут небольшими, но накапливаются. Это не будет легко заметить в профилировщике, так как все это немного над головой и немного над головой. Так что здравый смысл сказал бы: если вам не нужны функции ArrayList, вы не должны использовать его, если вы не хотите умереть тысячами сокращений (с точки зрения производительности).
Для внутреннего кода, если вы обнаружите, что вам нужно перейти с массивов на ArrayList, вероятность в большинстве случаев довольно проста ([i] становится get (i), что будет 99% изменений).
Если вы используете просмотр for-each (for (value: items) {}), то для этого также нет кода, который можно изменить.
Также, продолжая то, что вы сказали:
1) одинаковая скорость доступа, в зависимости от вашей среды. Например, виртуальная машина Android не имеет встроенных методов (насколько я знаю, это просто прямой интерпретатор), поэтому доступ к ней будет намного медленнее. Существуют и другие операции с ArrayList, которые могут вызывать замедления, в зависимости от того, что вы делаете, независимо от виртуальной машины (которая может быть быстрее с прямым массивом, опять же вам придется профилировать или проверять источник, чтобы быть уверенным).
2) Обертки увеличивают объем используемой памяти.
Вы не должны беспокоиться о скорости / памяти, прежде чем что-то профилировать, с другой стороны, вы не должны выбирать то, что вы знаете, как более медленный вариант, если у вас нет веских причин для этого.