Классы реализации коллекций

Рассмотрим конкретные реализации коллекций, т.е. классы, которые обеспечивают описанную выше функциональность. Мы будем рассматривать их в том же разрезе типов коллекций — List, Set, Map.

Коллекции-списки (List)

Реализованы в следующий трех вариантах ArrayList, LinkedList, Vector.

  • Класс Vector — это устаревший вариант, оставлен для совместимости с предыдущими версиями.

Класс ArrayList — используется чаще всего. Имеет два конструктора:

public ArrayList() // Конструктор пустого списка public ArrayList(Collection c) // Строит список из любой коллекции

А также следующие методы:

public int size() Возвращает количество элементов списка public boolean isEmpty() Проверяет, что список пуст public boolean contains(Object elem) Проверяет, принадлежит ли заданный объект списку public int indexOf(Object elem) Ищет первое вхождение заданного объекта в список и возвращает его индекс. Возвращает -1, если объект не принадлежит списку. public int lastIndexOf(Object elem) То же самое, но ищет последнее вхождение. public Object clone() Создает "поверхностную" копию списка. public Object[] toArray() Преобразует список в массив. public Object get(int index) Возвращает элемент коллекции с заданным номером. public Object set(int index, Object element) Заменяет элемент с заданным номером. public boolean add(Object o) Добавляет заданный объект в конец списка. public void add(int index, Object element) Вставляет элемент в указанную позицию списка. public Object remove(int index) Удаляет заданный элемент списка. public void clear() Полностью очищает список. public boolean addAll(Collection c) Добавляет к списку (в конец) все элементы заданной коллекции. public boolean addAll(int index, Collection c) Вставляет в список с указанной позиции все элементы коллекции. protected void removeRange(int fromIndex, int toIndex) Удаляет из коллекции объекты в заданном интервале индексов (исключая toIndex).

Класс LinkedList .

Он имеет практически ту же функциональность, что и ArrayList, и отличается от него только способом реализации и, как следствие, эффективностью выполнения тех или иных операций. Так добавление в LinkedList осуществляется в среднем быстрее, чем в ArrayList, последовательный проход по списку практически столь же эффективен, как у ArrayList, а произвольное извлечение из списка медленнее, чем у ArrayList.

Знакомство с другими типами коллекций мы продолжим на следующем занятии.

 

15)

Класс JList

Класс простого списка называется несколько странно - JList. По идее должно быть JListBox. Но именно Box, т. е. само обрамление, у списка-то и отсутствует. Дизайнеры Swing пошли по иному пути, предложив использовать в качестве графического контейнера списка панель прокрутки, выполненную как объект класса JScrollPane. Этот класс весьма удобен, когда речь заходит о чем-нибудь, связанном с прокруткой на экране текста, графики и даже Java-компонентов. На долю же класса JList остаются остальные графические операции и обработка данных, подлежащих отображению. Внутри класса, как и следовало ожидать, трудится класс модели данных. Вроде бы все логично, но далее, рассматривая пример, вы увидите, что все не так просто.

Класс JList имеет четыре конструктора:

JList(ListModel dataModel);JList(java.lang.Object[] listData);JList(java.util.Vector listData);JList().

Первый конструктор рассчитан на то, что вы сами сформируете модель данных для списка, "зарядите" ее данными, отображаемыми в списке, и уже потом создадите экземпляр класса JList. Второй конструктор непосредственно "заряжается" пунктами данных, которые вы намерены показать пользователю в списке. Это могут быть строки, картинки или некоторые другие объекты. Вместе с третьим конструктором, которому передается заполненный объект класса Vector, первые два конструктора используются наиболее часто. И наконец, четвертый конструктор по умолчанию, без каких-либо параметров идеально подходит для динамического добавления и удаления элементов выбора.

Класс JList содержит довольно много методов (самые необходимые из них вы найдете в табл. 1). К этим методам добавляются и методы от модели, работающей внутри с JList. По умолчанию это AbstractListModel, если только вы не зададите иной модели в конструкторе. В любой момент можно получить ссылку на модель вызовом метода getModel или назначить новую модель, передав ее в качестве параметра метода setModel.

 

 

16)Преобразование строк в числа
Мы видели, что в числовом контексте строки, представляющие числа, автоматически преобразуются в реальные числа. Как было показано выше, это преобразование можно сделать явным:

var number = Number(string_value);
var number = string_value - 0;

Такое преобразование неудобно из-за своей излишней строгости. Оно работает только с десятичными числами, и хотя преобразование допускает ведущие и замыкающие пробелы, оно не допускает наличия в строке каких-либо непробельных символов после числа. Для более гибких преобразований можно применять функции parseInt() и parseFloat(). Эти функции преобразуют и возвращают любое число, присутствующее в начале строки, игнорируя любые замыкающие нечисловые символы. Функция parseInt() обрабатывает только целые, а parseFloat() – как целые числа, так и числа с плавающей точкой. Если строка начинается с «0x» или «0X», parseInt() интерпретирует ее как шестнадцатеричное число. Например:

parseInt("3 blind mice"); // Возвращает 3
parseFloat("3.14 meters"); // Возвращает 3.14
parseInt("12.34"); // Возвращает 12
parseInt("0xFF"); // Возвращает 255

Функция parseInt() может иметь второй аргумент, указывающий основание системы счисления обрабатываемого числа. Допустимые значения – от 2 до 36. Например:

parseInt("11", 2); // Возвращает 3 (1*2 + 1)
parseInt("ff", 16); // Возвращает 255 (15*16 + 15)
parseInt("zz", 36); // Возвращает 1295 (35*36 + 35)
parseInt("077", 8); // Возвращает 63 (7*8 + 7)
parseInt("077", 10); // Возвращает 77 (7*10 + 7)

Если parseInt() и parseFloat() не могут преобразовать указанную строку в число, они возвращают NaN.

parseInt("eleven"); // Возвращает NaN
parseFloat("$72.47"); // Возвращает NaN