123
-
узнать, что входит в состав интерфейса List;
-
чтобы понять, как написать массив на основе реализации интерфейса List;
-
изучить разницу между одно-, двусвязными, и циклическими связанными
структурами данных в виде списков;
-
чтобы узнать, как реализовать интерфейс
List
,
используя связанный
список;
-
для того, чтобы понять, что такое интерфейс итератора.
Интерфейс
List
и класс
ArrayList.
Массив является индексируемой структурой: можно выбрать все элементы в
произвольном порядке, используя значение индекса. К
элементам можно получить
последовательный доступ с помощью цикла, который увеличивает индекс.
Вы не можете:
-
увеличивать или уменьшать длину;
-
добавить элемент в
указанную позицию без перемещения других
элементов, чтобы освободить место;
-
удалить элемент в заданном положении без смещения других элементов,
чтобы заполнить возникший пробел.
В интерфейс
List
включены следующие операции:
-
поиск заданного элемента;
-
добавление элемента в любой конец;
-
удаление элемента с любого конца;
-
обход структуры списка без использования индекса.
Не все классы выполняют перечисленные операции с
одинаковой степенью
эффективности. Массив предоставляет возможность хранить данные примитивных
типов, тогда как в списке из объектов типа класс хранятся ссылки на объекты (этому
способствует Autoboxing).
На рисунке 7.2 ниже приведена зависимость Java Collection.
Красным здесь
выделены интерфейсы, зеленым – абстрактные классы, а синим готовые реализации.
124
Рисунок 7.2 – Java Collection
ArrayList
- самая часто используемая коллекция.
ArrayList
инкапсулирует в себе обычный массив, длина которого автоматически увеличивается
при добавлении новых элементов. Так как
ArrayList
использует массив, то время
доступа к элементу по индексу минимально (в отличии от
LinkedList
).
При удалении произвольного элемента из списка, все элементы, находящиеся
«правее» смещаются на одну ячейку влево, при этом реальный размер массива (его
емкость, capacity) не изменяется. Если при добавлении элемента,
оказывается, что
массив полностью заполнен, будет создан новый массив размером (n * 3) / 2 + 1, в
него будут помещены все элементы из
старого массива + новый, добавляемый
элемент.
Достарыңызбен бөлісу: