Обычная реализация ArrayList
- это обычный тип коллекции для кода, которому нужно просто что-то, к чему он может многократно добавлять элементы, а затем считывать их. Тип предлагает больше возможностей, чем это, и пропуск некоторых из них может улучшить функциональность типа в основном случае использования, но общее количество дополнительного процессорного времени, которое пришлось бы тратить по всей юниверсе, если бы ArrayList
операций было хотя бы 1 % медленнее будет значительным.
Кроме того, неясно, как именно должны вести себя индексированные обращения к двустороннему списку массивов, поскольку существуют две разумные модели поведения: он может указывать, что добавление или удаление элементов с конца с низким номером должно изменить нумерацию все существующие элементы, или он может указывать, что индекс элемента, вставленного до элемента 0, будет равен -1 (все существующие индексы останутся на месте). Добавление более 2 ^ 32 элементов перед элементом 0 (при удалении достаточного количества элементов с другого конца во избежание нехватки памяти) добавит элемент MIN_INT, затем элемент MAX_INT, затем MAX_INT-1 и т. Д. Такой интерфейс может быть неудобным в некоторые способы, но могут быть очень хорошими в других (например, реализация может позволить одновременный индексированный доступ потоком записи и потоком чтения, которые работают на противоположных концах, так как разработчику, который хочет манипулировать элементом 547, не придется беспокоиться об этом когда это произойдет, элемент интереса переместится в слот № 548).
Конечно, существуют различные типы двусторонних коллекций, но это не означает, что добавление двусторонних функций добавит какое-либо значение для общих случаев использования.