на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Наследование и классы-коллекции
p align="left">Интерфейс List добавляет к методам интерфейса Collection методы, использующие индекс index элемента:

void add(int index, Object obj) -- вставляет элемент obj в позицию index; старые элементы, начиная с позиции index, сдвигаются, их индексы увеличиваются на единицу;

boolean addAll(int index, Collection coll) -- вставляет все элементы коллекции coll;

Object get(int index) -- возвращает элемент, находящийся в позиции index;

int indexOf(Object obj) -- возвращает индекс первого появления элемента obj в коллекции;

int lastindexOf (Object obj) -- возвращает индекс последнего появления элемента obj в коллекции;

Listiterator listiterator () -- возвращает итератор коллекции;

Listiterator listiterator (int index) -- возвращает итератор конца коллекции от позиции index;

Object Set (int index, Object obj) -- заменяет элемент, находящийся в позиции index, элементом obj;

List subListUnt from, int to) -- возвращает часть коллекции от позиции from включительно до позиции to исключительно.

Интерфейс Set

Интерфейс Set из пакета java.util, расширяющий интерфейс Collection, описывает неупорядоченную коллекцию, не содержащую повторяющихся элементов. Это соответствует математическому понятию множества (Set). Такие коллекции удобны для проверки наличия или отсутствия у элемента свойства, определяющего множество. Новые методы в интерфейс Set не добавлены, просто метод add () не станет добавлять еще одну копию элемента, если такой элемент уже есть в множестве.

Этот интерфейс расширен интерфейсом SortedSet.

Интерфейс SortedSet

Интерфейс SortedSet из пакета java.util, расширяющий интерфейс Set, описывает упорядоченное множество, отсортированное по естественному порядку возрастания его элементов или по порядку, заданному реализацией интерфейса Comparator.

Элементы не нумеруются, но есть понятие первого, последнего, большего и меньшего элемента.

Дополнительные методы интерфейса отражают эти понятия:

Comparator comparator () -- возвращает способ упорядочения коллекции; Object first()-- возвращает первый, меньший элемент коллекции;

SortedSet headSet (Object toElement) -- возвращает начальные, меньшие элементы до элемента toElement исключительно;

Object last () -- возвращает последний, больший элемент коллекции;

SortedSet subSet(Object fromElement, Object toElement) -- возвращает подмножество коллекции от элемента fromElement включительно до элемента toElement исключительно;

SortedSet tailSet (Object fromElement) -- возвращает последние, большие элементы коллекции от элемента fromElement включительно.

Интерфейс Map

Интерфейс Map из пакета java.util описывает коллекцию, состоящую из пар "ключ -- значение". У каждого ключа только одно значение, что соответствует математическому понятию однозначной функции или отображения.

Такую коллекцию часто называют еще словарем (dictionary) или ассоциативным массивом (associative array).

Обычный массив -- простейший пример словаря с заранее заданным числом элементов. Это отображение множества первых неотрицательных целых чисел на множество элементов массива, множество пар "индекс массива - элемент массива".

Класс HashTable -- одна из реализаций интерфейса мар.

Интерфейс Map содержит методы, работающие с ключами и значениями:

boolean containsKey (Object key) -- проверяет наличие ключа key;

boolean containsValue (Object value) -- проверяет наличие значения value;

Set entrySet () -- представляет коллекцию в виде множества, каждый элемент которого -- пара из данного отображения, с которой можно работать методами вложенного интерфейса Map.Entry;

Object get (Object key) -- возвращает значение, отвечающее ключу key;

Set keySet() -- представляет ключи коллекции в виде множества;

Object put(Object key, Object value) -- добавляет пару "key-- value", если такой пары не было, и заменяет значение ключа key, если такой ключ уже есть в коллекции;

void putAll (Map m) -- добавляет к коллекции все пары из отображения m;

Collection values() -- представляет все значения в виде коллекции.

В интерфейс Mар вложен интерфейс Map.Entry, содержащий методы работы с отдельной парой.

Интерфейс SortedMap

Интерфейс SortedMap, расширяющий интерфейс Map, описывает упорядоченную по ключам коллекцию мар. Сортировка производится либо в естественном порядке возрастания ключей, либо, в порядке, описываемом в интерфейсе Comparator.

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

Comparator comparator () -- возвращает способ упорядочения коллекции;

Object firstKey() -- возвращает первый, меньший элемент коллекции;

SortedMap headMap(Object toKey) -- возвращает начало коллекции до элемента с ключом toKey исключительно;

Object lastKey() -- возвращает последний, больший ключ коллекции;

SprtedMap subMap (Object fromKey, Object toKey) -- возвращает часть коллекции от элемента с ключом fromKey включительно до элемента с ключом toKey исключительно;

SortedMap tallMap (Object fromKey) -- возвращает остаток коллекции от элемента fromKey включительно.

Вы можете создать свои коллекции, реализовав рассмотренные интерфейсы. Это дело трудное, поскольку в интерфейсах много методов. Чтобы облегчить эту задачу, в Java API введены частичные реализации интерфейсов -- абстрактные классы-коллекции.

Абстрактные классы-коллекции

Эти классы лежат в пакете java.util,

Абстрактный класс AbstractGollection реализует интерфейс Collection, но оставляет нереализованными методы iterator (), size ().

Абстрактный класс AbstractList реализует интерфейс List, но оставляет нереализованным метод get() и унаследованный метод size() Этот класс позволяет реализовать коллекцию спрямым доступом к элементам, подобно массиву

Абстрактный класс AbstractSequentialList реализует интерфейс List, но оставляет нереализованным метод listiterator(int index) и унаследованный метод size(). Данный класс позволяет реализовать коллекции с последовательным доступом к элементам с помощью итератора Listiterator

Абстрактный класс AbstractSet реализует интерфейс Set, но оставляет нереализованными методы, унаследованные от AbstractCollection

Абстрактный класс AbstractMap реализует интерфейс Map, но оставляет нереализованным метод entrySet (),

Наконец, в составе Java API есть полностью реализованные классы-коллекции помимо уже рассмотренных классов Vector, Stack, Hashtable и Properties, Это классы ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap, WeakHashMap ,

Для работы с этими классами разработаны интерфейсы Iterator,

Listiterator, Comparator И классы Arrays И Collections.

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

Интерфейс Iterator

В 90-х годах было решено заносить данные в определенную коллекцию, скрыв ее внутреннюю структуру, а для работы с данными использовать методы этой коллекции.

В частности, задачу обхода возложили на саму коллекцию. В Java API введен интерфейс Iterator, описывающий способ обхода всех элементов коллекции. В каждой коллекции есть метод iterator(), возвращающий реализацию интерфейса Iterator для указанной коллекции. Получив эту реализацию, можно обходить коллекцию в некотором порядке, определенном данным итератором, с помощью методов, описанных в интерфейсе Iterator и реализованных в этом итераторе. Подобная техника использована в классе StringTokenizer.

В интерфейсе Iterator описаны всего три метода:

o логический метод hasNext () возвращает true, если обход еще не завершен;

o метод next() делает текущим следующий элемент коллекции и возвращает его в виде объекта класса Object;

o метод remove() удаляет текущий элемент коллекции.

Можно представить себе дело так, что итератор -- это указатель на элемент коллекции. При создании итератора указатель устанавливается перед первым элементом, метод next() перемещает указатель на первый элемент и показывает его. Следующее применение метода next() перемещает указатель на второй элемент коллекции и показывает его. Последнее применение метода next() выводит указатель за последний элемент коллекции.

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

Пример. Использование итератора вектора

Vector v = new Vector();

String s = "Строка, которую мы хотим разобрать на слова.";

StringTokenizer st = new StringTokenizer(s, " \t\n\r,.");

while (st.hasMoreTokens()){

// Получаем слово и заносим в вектор.

v.add(st.nextToken()); // Добавляем в конец вектора }

System.out.print*Ln(v.firstElement(}); // Первый элемент

System.out.println(v.lastElement()); // Последний элемент

v.SetSize(4); // Уменьшаем число элементов

v.add("собрать."); // Добавляем в конец укороченного вектора

v.Set(3, "опять"); // Ставим в позицию 3

for (int i = 0; i < v.sizeO; i++) // Перебираем весь вектор

System.out.print(v.get(i) + ".");

System.out.println(};

Iterator it = v.Iterator (); // Получаем итератор вектора

try{

while(it.hasNext()) // Пока в векторе есть элементы,

System.out.println(it.next()); // выводим текущий элемент

}catch(Exception e){}

Интерфейс Listlterator

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

В интерфейс ListIterator добавлены следующие методы:

void add (Object element) -- добавляет элемент element перед текущим элементом;

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

int nextindex() -- возвращает индекс текущего элемента; если текущим является последний элемент коллекции, возвращает размер коллекции;

Object previous() -- возвращает предыдущий элемент и делает его текущим;

int previous index() -- возвращает индекс предыдущего элемента;

void Set (Object element) -- заменяет текущий элемент элементом element;

выполняется сразу после next() или previous().

Как видите, итераторы могут изменять коллекцию, в которой они работают, добавляя, удаляя и заменяя элементы. Чтобы это не приводило к конфликтам, предусмотрена исключительная ситуация, возникающая при попытке использования итераторов параллельно "родным" методам коллекции. Именно поэтому в следующем примере действия с итератором заключены в блок try(){}-- catch(){}.

Пример с использованием итератора ListIterator.

Vector v = new Vector();

String s = "Строка, которую мы хотим разобрать на слова.";

StringTokenizer st = new StringTokenizer(s, " \t\n\r,.");

while (st.hasMoreTokens()){

// Получаем слово и заносим в вектор

v.add(st.nextToken()); // Добавляем в конец вектора

}

ListIterator lit = v.listlterator(); // Получаем итератор вектора

// Указатель сейчас находится перед началом вектора

try{

while(lit.hasNext()) // Пока в векторе есть элементы

System.out.println(lit.next()); // Переходим к следующему

// элементу и выводим его

// Теперь указатель за концом вектора. Пройдем к началу

while (lit.hasPrevious())System.out.println(lit.previous());

}

catch (Exception e) {}

Посмотрим теперь, какие возможности предоставляют классы-коллекции Java2.

Классы, создающие списки

Класс ArrayList полностью реализует интерфейс List и итератор типа Iterator. Класс ArrayList очень похож на класс Vector, имеет тот же набор методов и может использоваться в тех же ситуациях.

В классе ArrayList три конструктора;

ArrayList()-- создает пустой объект;

ArrayList(Collection coll) -- создает объект, содержащий все элементы коллекции coll;

ArrayList (int initCapacity) -- создает пустой Объект емкости initCapacity.

Страницы: 1, 2, 3, 4, 5



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.