Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Коллекции, списки, итераторы




В Java получили широкое использование коллекции (Collections) – “умные” массивы с динамически изменяемой длиной, поддерживающие ряд важных дополнительных операций по сравнению с массивами. Базовым для иерархии коллекций является класс java.util.AbstractCollection. (В общем случае класс коллекции не обязан быть потомком AbstractCollection – он может является любым классом, реализующим интерфейс Collection).

Основные классы коллекций:

  • Set, SortedSet, HashSet,TreeSet – множества (наборы неповторяющихся элементов)
  • List, ArrayList,LinkedList,Vector – списки (упорядоченные наборы элементов, которые могут повторяться в разных местах списка)
  • Map, Sorted Map – таблицы (списки пар “имя”-“значение”)

Доступ к элементам коллекции в общем случае не может осуществляться по индексу, так как не все коллекции поддерживают индексацию элементов. Эту функцию осуществляют с помощью специального объекта – итератора (iterator). У каждой коллекции collection имеется свой итератор который умеет с ней работать, поэтому итератор вводят следующим образом:

Iterator iter = collection.iterator()

У итераторов имеются следующие три метода:

boolean hasNext()- даёт информацию, имеется ли в коллекции следующий объект.

Object next() – возвращает ссылку на следующий объект коллекции.

void remove() – удаляет из коллекции текущий объект, то есть тот, ссылка на который была получена последним вызовом next().

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

 

java.util.List components= java.util.Arrays.asList(this.getComponents());

 

for (Iterator iter = components.iterator();iter.hasNext();) {

Object elem = (Object) iter.next();

javax.swing.JOptionPane.showMessageDialog(null,"Компонент: "+

elem.toString());

}

 

Основные методы коллекций:

Имя метода Действие
boolean add(Object obj) Добавление объекта в коллекцию (в конец списка). Возвращает true в случае успешного добавления - изменения коллекции. Коллекция может не позволить добавление элементов несовместимого типа или не подходящих по какому-либо другому признаку.
boolean addAll(Collection c) Добавление в коллекцию всех объектов из другой коллекции. Возвращает true в случае успешного добавления, то есть если добавлен хотя бы один элемент.
void clear() Очистка коллекции - удаление из неё ссылок на все входящие в коллекцию объекты. При этом те объекты, на которые имеются ссылки у других элементов программы, не удаляются из памяти.
boolean contains(Object obj) Возвращает true в случае, если коллекция содержит объект obj. Проверка осуществляется с помощью поочерёдного вызова метода obj.equals(e) для элементов e, входящих в коллекцию.
boolean containsAll(Collection c) Возвращает true в случае, если коллекция содержит все элементы коллекции c.
boolean isEmpty() Возвращает true в случае, если коллекция пуста, то есть не содержит ни одного элемента.
Iterator iterator() Возвращает ссылку на итератор – объект, позволяющий получать поочерёдный доступ к элементам коллекции. Для одной коллекции разрешается иметь произвольное число объектов-итераторов, в том числе – разных типов. В процессе работы они могут указывать на разные элементы коллекции. После создания итератор всегда указывает на начало коллекции – вызов его метода next() даёт ссылку на начальный элемент коллекции.
boolean remove(Object obj) Удаляет из коллекции первое встретившееся вхождение объекта obj. Поиск и удаление осуществляется с помощью итератора. Возвращает true в случае, если удаление удалось, то есть если коллекция изменилась.
boolean remove All(Collection c) Удаляет из коллекции все элементы коллекции c. Возвращает true в случае, если удаление удалось, то есть если коллекция изменилась.
boolean retainAll(Collection c) Оставляет в коллекции только те из входящих в неё элементов, которые входят в коллекцию c.
int size() Возвращает число элементов в коллекции.
Object[] toArray() Возвращает массив ссылок на объекты, содержащиеся в коллекции. То есть преобразует коллекцию в массив.
T[] toArray(T[n] a) Возвращает массив элементов типа T, полученных в результате преобразования элементов, содержащихся в коллекции. То есть преобразует коллекцию в массив. Если число элементов коллекции не превышает размер n массива a, размещение данных производится в существующих ячейках памяти, отведённых под массив. Если превышает n – в памяти динамически создаётся и заполняется новый набор ячеек, и их число делается равным числу элементов коллекции. После чего переменная a начинает ссылаться на новый набор ячеек.
String toString() Метод переопределён – он возвращает строку со списком элементов коллекции. В списке выводятся заключённые в квадратные скобки строковые представления элементов, разделяемые комбинацией “, ” – запятая с пробелом после неё.

 

Самыми распространёнными вариантами коллекций являются списки (Lists). Они во многом похожи на массивы, но отличаются от массивов тем, что в списках основными операциями являются добавление и удаление элементов. А не доступ к элементам по индексу, как в массивах.

В классе List имеются методы коллекции, а также ряд дополнительных методов:

list.get(i) – получение ссылки на элемент списка list по индексу i.

list.indexOf(obj) - получение индекса элемента obj в списке list. Возвращает -1 если объект не найден.

list.listIterator(i) – получение ссылки на итератор типа ListIterator, обладающего дополнительными методами по сравнению с итераторами типа Iterator.

list.listIterator(i) – то же с позиционированием итератора на элемент с индексом i.

list.remove(i) – удаление из списка элемента с индексом i.

list.set(i,obj) – замена в списке элемента с индексом i на объект obj.

list.subList(i1,i2) – возвращает ссылку на подсписок, состоящий из элементов списка с индексами от i1 до i2.

Кроме них в классе List имеются и многие другие полезные методы.

 

Ряд полезных методов для работы с коллекциями содержится в классе Collections:

Collections.addAll(c,e1,e2,…,eN) - добавление в коллекцию c произвольного числа элементов e1,e2,…,eN.

Collections.frequency(c,obj) – возвращает число вхождений элемента obj в коллекцию c.

Collections.reverse(list) – обращает порядок следования элементов в списке list (первые становятся последними и наоборот).

Collections.sort(list) – сортирует список в порядке возрастания элементов. Сравнение идёт вызовом метода e1.compareTo(e2) для очередных элементов списка e1 и e2.

Кроме них в классе Collections имеются и многие другие полезные методы.

 

В классе Arrays имеется метод

Arrays.asList(a) – возвращает ссылку на список элементов типа T, являющийся оболочкой над массивом T[] a. При этом и массив, и список содержат одни и те же элементы, и изменение элемента списка приводит к изменению элемента массива, и наоборот.

 





Поделиться с друзьями:


Дата добавления: 2017-02-28; Мы поможем в написании ваших работ!; просмотров: 705 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Не будет большим злом, если студент впадет в заблуждение; если же ошибаются великие умы, мир дорого оплачивает их ошибки. © Никола Тесла
==> читать все изречения...

2613 - | 2287 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.