Иерархия классов-коллекций
Классы-коллекции, реализующие описанные выше интерфейсы, являются наследниками абстрактного класса AbstractCollection. Иерархия этих классов приведена на рисунке (синим цветом показаны интерфейсы).
Класс Vector
Vector (вектор) – набор упорядоченных элементов, к каждому из которых можно обратиться по индексу. По сути эта коллекция представляет собой обычный список.
Особенность вектора в том, что помимо текущего размера, определяемого количеством элементов в нем и возвращаемого методом size(), он имеет емкость, возвращаемую методом capacity() – размер выделенной под элементы памяти, которая может быть больше текущего размера. Ее можно увеличить методом ensureCapacity(int minCapacity) или сравнять с размером вектора методом trimToSize(). Каждый раз, когда нужно добавить в полностью «заполненный» вектор новый элемент, емкость увеличивается с запасом.
В классе Vector четыре конструктора:
Vector() – создает пустой вектор с емкостью в 10 элементов;
Vector(int capacity) – создает пустой вектор указанной емкости;
Vector(int capacity, int increment) – создает пустой вектор указанной емкости, а также задает число, на которое будет увеличиваться емкость при необходимости;
Vector(Collection c) – создает вектор и заполняет его элементами другой коллекции.
Класс Vector реализует интерфейс List, основные методы которого названы выше. К этим методам добавляется еще несколько.
firstElement() – позволяет обратиться к первому элементу вектора.
lastElement() – позволяет обратиться к последнему элементу.
removeElementAt(int pos) – удаляет элемент в заданной позиции.
removeRange(int begin, int end) – удаляет несколько подряд идущих элементов.
Класс ArrayList
Класс ArrayList – аналог класса Vector. Он представляет собой список и может использоваться в тех же ситуациях. Основное отличие в том, что он не синхронизирован и одновременная работа нескольких параллельных процессов с объектом этого класса не рекомендуется. В обычных же ситуациях он работает быстрее.
Класс Stack
Stack – коллекция, объединяющая элементы в стек. Стек работает по принципу LIFO (последним пришел – первым ушел). Элементы кладутся в стек «друг на друга», причем взять можно только «верхний» элемент, т.е. тот, который был положен в стек последним. Для стека характерны операции, реализованные в следующих методах класса Stack:
push(Object item) – помещает элемент на вершину стека;
pop() – извлекает из стека верхний элемент;
peek() – возвращает верхний элемент, не извлекая его из стека;
empty() – проверяет, не пуст ли стек;
search(Object item) – ищет «глубину» объекта в стеке. Верхний элемент имеет позицию 1, находящийся под ним – 2 и т.д. Если объекта в стеке нет, возвращает -1.
Класс Stack является наследником класса Vector, поэтому имеет все его методы (и, разумеется, реализует интерфейс List). Однако если в программе нужно моделировать именно стек, рекомендуется использовать только пять вышеперечисленных методов.
Дата добавления: 2017-01-26; просмотров: 1607;