Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java.doc
Скачиваний:
11
Добавлен:
20.04.2019
Размер:
936.45 Кб
Скачать

Коллекции

Простейшим средством для хранения и обработки нескольких однотипных объектов являются массивы.

Массивы мало пригодны для реализации алгоритмов обработки, при которых требуется менять их состав, т.е. добавлять или удалять их элементы.

В стандартной библиотеке языка Java имеется набор интерфейсов, абстрактных классов и их реализаций, обеспечивающих единый подход для хранения и обработки наборов объектов.

Совокупность данных средств принято называть Java Collections Frameworks или просто коллекции.

Некоторые классы и интерфейсы Java Collections Framework

Экземпляры коллекций могут содержать объекты любых ссылочных типов данных.

Классы, обладающие таким свойством, принято называть параметризованными.

При описании и создании переменных параметризованных классов требуется указывать конкретный тип данных, обработка которого будет осуществляться:

ИмяКласса<Тип> переменная;

переменная = new ИмяКласса<Тип>(...);

Пример 1. Создание стека целых чисел

Stack<Integer> stack;

stack = new Stack<Integer>();

Пример 2. Создание списка студентов

List<Student> students;

students = new ArrayList<Student>();

Пример 3. Создание множества точек

Set<Point> points;

points = new HashSet<Point>();

Интерфейс Iterable

Классы, реализующие этот интерфейс, предоставляют возможность последовательной обработки элементов коллекции с помощью цикла for :

for ( Тип объект : коллекция ) {

// обработка объекта

}

Пример. Вывод списка студентов на экран

for ( Student student : students ) {

System.out.println(student);

}

В общем случае порядок обработки элементов коллекции может не соответствовать порядку добавления элементов

Интерфейс Collection

Описывает общие методы по обработке элементов коллекции

int size() возвращает количество элементов коллекции;

boolean isEmpty() проверяет, содержит ли коллекция элементы (возвращает значение true, если коллекция пуста);

boolean contains(Object o) проверяет, принадлежит ли объект коллекции (возвращает значение true, если объект уже содержится в коллекции);

boolean add(E e) добавляет элемент в коллекцию;

boolean remove(Object o) удаляет из коллекции заданный объект (если, конечно, он содержится в коллекции);

Методы add и remove возвращают значение true, если в результате их выполнения состав коллекции изменился.

void clear() очищает коллекцию (удаляет из коллекции все содержащиеся в ней объекты);

Интерфейс List

Описывает списки – коллекции с фиксированным порядком размещения элементов.

Предполагается, что все элементы списков пронумерованы целыми числами от 0 до size()-1.

Методы интерфейса List позволяют обращаться к каждому элементу списка по индексу.

E get(int index) возвращает ссылку на элемент из указанной позиции;

int indexOf(Object o) возвращает индекс первого вхождения объекта;

int lastIndexOf(Object o) возвращает индекс последнего вхождения объекта;

В случае отсутствия объекта в списке методы indexOf(), lastIndexOf() возвращают значение –1.

void add(int index, E element) вставить объект в указанную позицию списка;

E remove(int index) удаляет объект из списка;

E set(int index, E element) заменяет объект с указанным индексом на новый.

Методы set(), remove() возвращают ссылку на удаленный/замененный объект.

Самыми используемыми реализациями интерфейса List являются классы ArrayList и Vector, которые можно использовать, например, как массивы с переменным количеством элементов.

Класс Stack, интерфейсы Queue и Deque

Класс Stack (стек), интерфейсы Queue (очередь) и Deque (двухстороння очередь) используются для описания списочных структур данных, которые позволяют обращаться к элементам, расположенных на краях списка.

Подобные структуры данных используются для реализации широкого круга алгоритмов.

Основные методы стека, очереди и дека

Стек

Очередь

Дек

Описание метода

void push(E e)

void addFirst(E e)

добавить элемент в начало списка

E pop()

E remove()

E poll()

E removeFirst()

E pollFirst()

извлечь первый элемент из списка

E peek()

E peek()

E element()

E getFirst()

E peekFirst()

получить ссылку на первый элемент

 

void add(E e)

void addLast(E e)

добавить элемент в конец списка

E removeLast()

E pollLast()

извлечь последний элемент из списка

E getLast()

E peekLast()

получить ссылку на последний элемент

Интерфейс Set

Интерфейс Set описывает множества.

Особенностью множеств является то, что все элементы в них различны. Для этого при добавлении объекта внутри метода add() выполняется проверка, присутствует ли во множестве элемент с таким значением.

Для сравнения объектов используются методы equals() и hashCode().

Чтобы обработка объектов пользовательских классов внутри множеств осуществлялась корректно, необходимо перегрузить эти методы.

Многие интегрированные среды разработки приложений позволяют генерировать эти методы автоматически на основе выбранных полей.

@Override

public boolean equals(Object obj) {

if (obj == null) {

return false;

}

if (getClass() != obj.getClass()) {

return false;

}

final Point other = (Point) obj;

if (this.x != other.x) {

return false;

}

if (this.y != other.y) {

return false;

}

return true;

}

@Override

public int hashCode() {

int hash = 5;

hash = 11 * hash + (int) (Double.doubleToLongBits(this.x) ^

(Double.doubleToLongBits(this.x) >>> 32));

hash = 11 * hash + (int) (Double.doubleToLongBits(this.y) ^

(Double.doubleToLongBits(this.y) >>> 32));

return hash;

}

Для выполнения операций над отдельными элементами множеств могут использоваться методы

add() для добавления элемента в множество;

contains() для проверки принадлежности элемента множеству;

remove() для удаления элемента из множества

и т.д.

Для выполнения операций над двумя множествами могут использоваться методы

boolean addAll(Collection<E> c) добавляет в множество все элементы указанной коллекции (объединение множеств);

boolean removeAll(Collection<E> c) удаляет из множестве те элементы, которые принадлежат указанной коллекции (дополнение множеств);

boolean retainAll(Collection<E> c) оставляет в множестве те элементы, которые принадлежат указанной коллекции (пересечение множеств);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]