Подробное знакомство со стандартной библиотекой Java мы начнем с коллекций объектов. Они реализованы различными классами пакета java.util. Мы рассмотрим не весь этот пакет, а только классы, связанные с коллекциями, что, однако, составляет значительную его часть.
Что такое коллекции объектов. Это очень мощный и исключительно полезный механизм. Простейшей коллекцией является массив. Но массив имеет ряд недостатков. Один из самых существенных - размер массива фиксируется до начала его использования. Т.е. мы должны заранее знать или подсчитать, сколько нам потребуется элементов коллекции до начала работы с ней. Зачастую это неудобно, а в некоторых случаях — невозможно.
Поэтому все современные базовые библиотеки различных языков программирования имеют тот или иной вариант поддержки коллекций объектов. Коллекции обладают одним важным свойством — их размер не ограничен. Выделение необходимых для коллекции ресурсов спрятано внутри соответствующего класса. Работа с коллекциями облегчает и упрощает разработку приложений. Отсутствие же подобного механизма в составе средств разработки вызывает серьезные проблемы, которые приводят либо к различным ограничениям в реализации либо к самостоятельной разработке адекватных средств для хранения и обработки массивов информации заранее неопределенного размера.
В Java средства работы с коллекциями весьма развиты и имеют много приятных и полезных особенностей, облегчающих жизнь разработчикам.
Начнем изучение коллекций в Java с примера.
Пример
Одним из широко используемых классов коллекций является ArrayList. Пример использования этой коллекции приводится ниже.
import java.util.*;
import java.io.*;
|
public class ArrayListTest {
ArrayList lst = new ArrayList();
Random generator = new Random();
void addRandom() {
lst.add(new Integer(generator.nextInt()));
}
public String toString() {
return lst.toString();
}
public static void main(String args[]) {
ArrayListTest tst = new ArrayListTest();
for(int i = 0; i < 100; i++)
tst.addRandom();
System.out.println("Сто случайных чисел: "+tst.toString());
}
}
Рассмотрим данный пример подробнее. Здесь, кроме класса ArrayList, использованы еще ряд классов бибилиотеки Java.
- Random — класс из java.util. Расширяет возможности класса Math по генерации случайных чисел (см. документацию).
- Integer — так называемый wrapper-класс (класс-обертка) для целых (int). Он использован потому, что в коллекцию нельзя занести данные элементарных типов, а только объекты классов.
Класс ArrayListTest имеет два поля — поле lst класса ArrayList и поле generator класса Random, используемое для генерации случайных чисел. Метод addRandom() генерирует и заносит в коллекцию очередное случайное число. Метод toString() просто обращается к методу toString() класса ArrayList, который обеспечивает формирование представления списка в виде строки.
Метод main(...) создает объект класса ArrayListTest и организует цикл порождени 100 случайных чисел с занесением их в коллекцию, вызыва метод addRandom(). После этого он печатает результат.
Оттранслируем и запустим данную программу.
Этот пример не демонстрирует особых преимуществ коллекций, а лишь технику их использования. Из него видно, что добавить элемент в коллекцию можно методом add(...) класса ArrayList и при этом мы нигде не указываем размер коллекции.
Рассмотрим коллекции более систематично.
В Java коллекции объектов разбиты на три больших категории: List (список), Set (множество) и Map (отображение).
Посмотрим документацию. В java.util определены интерфейсы:
Collection
|
+------- List
|
+------- Set
Map
Эти интерфейсы составляют основу для построения классов коллекций Java.