Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции, Кокарева, TR_TKC / 4. Контейнерные классы. Коллекции и карты

.docx
Скачиваний:
65
Добавлен:
15.03.2016
Размер:
88.22 Кб
Скачать

Контейнерные классы

Лекция 4 по дисциплине: Технология разработки ТК сервисов

СибГУТИ

Автор: Е.В. Кокорева

1. Коллекции

Коллекции или контейнеры — это классы позволяющие хранить и производить операции над множеством объектов.

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

Интерфейсы в Collections Framework играют ключевую роль. Все классы коллекций реализуют различные интерфейсы, которые определяют поведение коллекции.

Интерфейс определяет «что делает коллекция», а конкретная реализация — «как коллекция делает то, что определяет интерфейс».

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

Взаимодействие интерфейсов коллекций и карт:

Инструментальный набор:

Интерфейс

Классы

Collection

-

Set

HashSet LinkedHashSet

SortedSet

TreeSet

Queue

PriorityQueue

Deque

ArrayDeque

List

ArrayList Vector

Stack LinkedList

Map

HashMap Hashtable

LinkedHashMap

SortedMap

TreeMap

2. Collection

Интерфейс Collection содержит набор общих методов, которые используются в большинстве коллекций:

  • boolean add(Object obj) – добавляет в коллекцию новый элемент, если элементы коллекции упорядочены, то новый элемент добавляется в конец коллекции, в коллекцию Set элемент добавляется только, если такого нет в коллекции;

  • boolean contains(Object obj) – возвращает true, если объект obj содержится в коллекции и false, если нет;

  • boolean isEmpty() – проверяет, пуста ли коллекция;

  • boolean remove(Object obj) – удаляет из коллекции элемент obj, возвращает false, если такого элемента в коллекции не нашлось;

  • int size() – возвращает количество элементов коллекции.

Пример:

import java.util.*;

public class Main {

public static void main(String[] args) {

Collection col = new HashSet();

String[] str = {"Hello", "Good Bye", "Window", "Hello"};

String[] st = {"Window", "Morning", "Food"};

for (int i = 0; i < str.length; i++){

if (col.add(str[i])) System.out.println("Добавляю элемент " + str[i]);

else System.out.println("Не могу добавить повторно " + str[i]);

}

System.out.print("Коллекция из " + col.size() + " элементов: ");

System.out.print(col);

System.out.println("\n");

for (int i = 0; i < st.length; i++){

if (col.remove(st[i])) System.out.println("Удаляю элемент " + st[i]);

else System.out.println("Не могу удалить " + st[i] + " нет такого элемента");

}

System.out.print("Коллекция из " + col.size() + " элементов: ");

System.out.print(col);

System.out.println("\n");

}

Результат работы:

Добавляю элемент Hello

Добавляю элемент Good Bye

Добавляю элемент Window

Не могу добавить повторно Hello

Коллекция из 3 элементов: [Window, Hello, Good Bye]

Удаляю элемент Window

Не могу удалить Morning - нет такого элемента

Не могу удалить Food - нет такого элемента

Коллекция из 2 элементов: [Hello, Good Bye]

Методы групповой обработки

Работают с коллекцией как с единым целым.

  • void clear() – удаляет все элементы коллекции;

  • boolean addAll(Collection c) – добавляет в коллекцию все элементы коллекции c;

  • boolean removeAll(Collection c) – удаляет из данной коллекции все элементы коллекции c;

  • boolean containsAll(Collection c) – возвращает true, если данная коллекция содержит коллекцию с;

  • boolean retainAll(Collection c) – удаляет из данной коллекции все элементы, не принадлежащие коллекции c.

Операции с массивами

  • Object[ ] toArray() – возвращает массив со всеми элементами коллекции;

  • Object[ ] toArray(Object a[]) – сохраняет элементы коллекции в массив определённого типа.

3. Iterator

Интерфейс Iterator служит для создания объекта для перебора элементов коллекции.

Создать объект итератор можно, вызвав метод iterator(), определённый в интерфейсе Collection, например:

Iterator iter = list.iterator();

где list – объект, содержащий список (коллекцию).

Интерфейс Iterator имеет три метода:

  • Object next() – возвращает очередной элемент коллекции, к которой «привязан» итератор (и делает его текущим). Порядок перебора определяет сам итератор.

  • boolean hasNext() – возвращает true, если существует следующий элемент коллекции;

  • void remove() – удаляет текущий элемент, не возвращая значения.

Пример применения итератора для последовательного перебора элементов коллекции:

Iterator iter = col.iterator();

while(iter.hasNext())

System.out.println("Следующий элемент: " + iter.next());

4. Интерфейс List

Классы-реализации:

  • Vector;

  • Stack;

  • ArrayList;

  • LinkedList (производный класс от интерфейсов List, Queue и Deque).

Пример работы с объектами класса ArrayList

public static void main(String[] args) {

Shape[] sh = {new Shape(), new Circle(2), new Triangle(1, 3, 3), new Square(5)};

ArrayList<Shape> arr = new ArrayList<Shape>();

for (int i = 0; i < sh.length; i++){

sh[i].area = sh[i].areaCalc();

sh[i].perimeter = sh[i].perimeterCalc();

arr.add(sh[i]);

}

if (!arr.isEmpty())

for (Shape shap : arr)

System.out.println ("Элемент коллекции №" + arr.indexOf(shap) + " " +

sh[arr.indexOf(shap)].getClass().getName() + " " + "Его площадь = " + sh[arr.indexOf(shap)].area);

System.out.println();

List ar = arr.subList(1,3);

ListIterator it = ar.listIterator();

while(it.hasNext()){

System.out.println("Элемент №" + it.nextIndex() + " " + ar.get(it.nextIndex()).getClass().getName());

it.next();

}

}

Результат работы

Элемент коллекции №0 Shape Его площадь = 0.0

Элемент коллекции №1 Circle Его площадь = 12.566

Элемент коллекции №2 Triangle Его площадь = 1.479019945774904

Элемент коллекции №3 Square Его площадь = 25.0

Элемент №0 Circle

Элемент №1 Triangle

5. Queue

Классы:

  • PriorityQueue;

  • Linked.

6. Deque

Классы:

  • ArrayDeque;

  • LinkedList.

7. Set

Классы:

  • HashSet;

  • LinkedHashSet.

8. SortedSet

Класс:

  • TreeSet.

9. Map

Карта – набор пар «Ключ-Значение» с возможностью выборки значения по ключу.

Методы

  • Object put(Object key, Object value) – вставляет в карту вхождение <ключ значение>;

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

  • Object remove(Object key) – удаляет значение, соответствующее ключу;

  • boolean containsKey(Object key) – возвращает true, если данному ключу сопоставлено значение;

  • boolean containsValue(Object key) – возвращает true, если существует один или несколько ключей, которым сопоставлено данное значение;

  • int size() – возвращает количество уникальных ключей карты (вхождений);

  • boolean isEmpty() – возвращает true, если карта пуста;

  • void putAll(Map m) – копирует все элементы из переданной карты в текущую;

  • void clear() – очистить карту.

Пример:

Map<String, String> map = new HashMap<String, String>();

map.put("1", "a");

map.put("1", "2");

for(Entry<String, String> entry : map.entrySet()){

System.out.println(entry.getKey() + " " + entry.getValue());

}

Результат работы:

1 2

Спасибо за внимание!