Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 8. Коллекции в java.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
279 Кб
Скачать
☆

Классы-коллекции в Java

Коллекция — это группа элементов с операциями добавления, извлечения и поиска элемента. Механизм работы операций существенно различается в зависимости от типа коллекции. Например, элементы стека упорядочены в последовательность, добавление нового элемента может происходить только в конец этой последовательности, и получить можно только элемент, находящийся в конце (то есть, добавленный последним). Очередь, напротив, позволяет получить лишь первый элемент (элементы добавляются в один конец последовательности, а «забираются» с другого). Другие коллекции (например, список) позволяют получить элемент из любого места последовательности.

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

Классы-коллекции

Коллекции в библиотеке java.util представлены набором классов и интерфейсов.

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

Элементы большинства коллекций имеют тип Object. Это значит, что (в отличие от обычного массива) не нужно заранее указывать тип элементов, которые будут помещены в коллекцию. Можно добавлять в нее объекты любого класса, поскольку все классы являются наследниками класса Object, более того — в одной коллекции могут храниться объекты совершенно разных классов.

Конечно, это может привести и к трудностям. Если необходимо совершать какие-то операции над элементом коллекции (а объекты помещаются в коллекцию именно для того, чтобы потом их извлекать и обрабатывать), невозможно воспользоваться его методами, не приведя объект к его «настоящему» классу посредством явного приведения типов.

Например, имеется объект класса String (обычная строка) и нужно добавить его в стек (класс stack) с помощью метода push(Object item):

String str = "Ценная строка"; stack.push(str);

Коллекция, хранящая элементы типа Object, сразу же «забывает», что ваш объект — строка, поскольку при его добавлении было осуществлено автоматическое приведение типа String к типу Object. Его можно извлечь методом pop(), но чтобы вернуть ему прежний тип (а без этого невозможно воспользоваться ни одним из его методов), придется осуществить явное преобразование оператором (String):

str = (String)stack.pop();

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

Но если попытаться привести объект к неправильному типу, возникнет ошибка в программе:

stack.push(new Dog("Шарик", 12)); // помещаем в стек собаку

str = (Mouse)stack.pop(); // вынимаем собаку и пытаемся объявить ее мышью, но эти классы не связаны наследованием и программа выдаст ошибку во время выполнения

Так что возможностью помещать в коллекцию любые объекты воспользоваться скорее всего не получится. Поэтому в каждую коллекцию следует помещать объекты только одного класса (и производных от него).