Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metoda_OOP.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.71 Mб
Скачать
  1. В описании узла дерева необходимо создать и инициализировать объект класса список или набор сыновей, например

/* ListNode.java */

1 import java.util.*;

2 public class ListNode implements INode{

3 protected List listSon = new ArrayList();

4   

5 }

6 }

/* SetNode.java */

1 import java.util.*;

2 public class SetNode implements INode{

3 protected Set setSon = new LinkedHashSet();

4   

5 }

6 }

  1. Количество сыновей узла дерева определяется следующим образом:

    int countList = listSon.size();

    int countSet = setSon.size();

  2. Добавление сына в список или набор сыновей реализуется с помощью вызова метода add( ).

    INode node;

    node.setData(…);

    listSon.add(node);

    setSon.add(node);

  3. Доступ к сыну узла дерева:

  1. элементу списка с индексом i выполняется следующим образом

node = (INode)listSon.get(i);

или путем получения массива из списка

node = (INode)listSon.toArray()[i];

  1. Элементу набора с индексом I выполняется путем получения массива из набора

node = (INode)setSon.toArray()[i];

Следует обратить внимание на типизацию ссылки типа Object, получаемой из коллекции.

6.2.2Представление и реализация дерева на основе ассоциативных массивов (карт отображений)

Ассоциативный массив или карта отображений (map) - это объект, который хранит ассоциации (связи) между ключами и значениями, или иначе – пары ключ/значение, например <ЧГТУ, объект-ЧГТУ>, <№зачетки, объект-СТУДЕНТ>. В качестве ключей не могут использоваться примитивные типы, могут использоваться только объекты.

В Java различают интерфейсы карт отображений и классы карт отображений.

В состав интерфейсов карт отображений входят – Map, Map.Entry и SortedMap, которые предназначены:

  • Map - для отображения уникальных ключей в значения;

  • Map.Entry – для описания отдельного элемента (пары ключ/значение) карты;

  • SortedMap – расширяет Map и поддерживает ключи или пары в отсортированном порядке.

К наиболее часто используемым методам интерфейса Map относятся:

  • Object put (Object k, Object v) – добавляет новую пару ключ/значение в вызывающую карту, например put (ЧГТУ, objectSTU);

  • Object get (Object key) – возвращает значение, связанное с ключом key;

  • Set entrySet() – переводит карту в множество пар <ключ, значение>, т.е. возвращает набор (множество), который содержит объекты типа Map.Entry;

  • Set keySet() – возвращает набор (множество) ключей карты;

  • Collection values() – возвращает коллекцию значений всех пар ассоциативного массива;

  • int size() – возвращает размер карты.

К наиболее часто используемым методам интерфейса Map.Entry относятся:

  • Object getKey() – возвращает ключ текущей пары (входа) вызывающей карты;

  • Object getValue() – возвращает значение текущей пары (входа) вызывающей карты;

Классы ассоциативных массивов (карт отображений) реализуют методы интерфейсов ассоциативных массивов. Стандартные классы ассоциативных массивов Java можно разбить на две группы – абстрактные и конкретные классы.

Абстрактные классы ассоциативных массивов обеспечивают частичную реализацию интерфейсов и используются для создания конкретных классов ассоциативных массивов.

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

К конкретным классам ассоциативных массивов относятся классы:

  • HashMap - ассоциативный массив в виде хеш-таблицы, обеспечивают быстрый доступ к объектам;

  • TreeMap - ассоциативный массив в виде сбалансированного дерева, поддерживающего сортированный порядок элементов;

  • LinkedHashMap - отличается от HashMap, тем что хранит элементы порядке добавления.

Примечание. Следует обратить внимание, что с целью универсальности ассоциативные массивы содержат ссылки типа Object. Поэтому для получения из ассоциативного массива ссылки на конкретный объект ссылку типа Object приходится типизировать конкретным типом.

В рамках данной лабораторной работы следует использовать один из классов ассоциативных массивов, например, LinkedHashMap.

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