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

3-й семестр / Лекции / 8 - Презентация

.pdf
Скачиваний:
63
Добавлен:
25.12.2020
Размер:
10.74 Mб
Скачать

Центрдистанционногообучения

Маски

\\Метод компилируется

public static List<?> getList() {

List<Fruit> fruits = new ArrayList<Fruit>(); fruits.add(new Apple());

return fruits;

}

List<?> wFruits1 = getList(); \\Работает

List<Fruit> wFruits2 = getList();

\\Ошибка компиляции

List<Apple> wFruits3 = getList();

\\Ошибка компиляции

51 online.mirea.ru

Центрдистанционногообучения

Маски

public static void addToList(List<?> fruits) {

\\add не работают все fruits.add(new Fruit()); fruits.add(new Apple()); fruits.add(new Citrus()); fruits.add(new Orange());

Object o = fruits.get(0); \\работает

\\остальные get не работают

Fruit f = fruits.get(0); Citrus c = fruits.get(0); Orange or = fruits.get(0);

}

//все вызовы не вызывают ошибки компиляции

addToList(new ArrayList<Fruit>()); addToList(new ArrayList<Apple>()); addToList(new ArrayList<Citrus>()); addToList(new ArrayList());

52 online.mirea.ru

Центрдистанционногообучения

Ограничение снизу

Определяет ограничение супертипа

<? super sub>

Некоторый конкретный тип, параметр которого является суперклассом для sub

53 online.mirea.ru

Центрдистанционногообучения

• Имеется:

Проблема

List<Integer> list = new ArrayList<Integer>(); Map<Integer, Comparable<String>> m =

new HashMap<Integer,Comparable<String>>();

// Зачемдварписатьзаоднотоже???

• Хотелось бы:

List<Integer> list = new ArrayList<>(); Map<Integer, Comparable<String>> m =

new HashMap<>();

54 online.mirea.ru

Центрдистанционногообучения

Вывод типа (type inference) (Java 1.7)

• Можно использовать, если компилятор из контекста может понять, какие типы нужны

<> – «алмазная запись» (diamond notation)

• В основном используется при создании объектов в ходе инициализации переменных

• При создании объектов нельзя путать отсутствие указания типа (будет обобщенный тип) и оператор алмаз (будет вывод типа)

• Из-за механизма стирания в параметризованных типах могут возникать непроверяемые компилятором приведения

55 online.mirea.ru

Центрдистанционногообучения

Коллекции в Java (Collections)

Коллекции в Java являются контейнерами

объектов, которые благодаря полиморфизму

может содержать объекты любого класса,

производного от Object (который на самом деле и есть любой класс)

online.mirea.ru

56

Центрдистанционногообучения

Какие бывают Коллекции ?

Существуют два главных интерфейса для всех типов коллекций в Java:

Collection<E>

Map<K,V>

online.mirea.ru

57

Центрдистанционногообучения

Другие Коллекции

1.Guava(Google Collections Library) - библиотека добавляет несколько полезных реализаций структур

данных, таких как мультимножество,

мультиотображение и двунаправленное отображение.

Улучшена эффективность.

2.Trove library - реализация коллекций, позволяющая

хранить примитивы (в Java Collections Framework примитивы хранить нельзя, только оберточные типы), что позволяет повысить эффективность работы.

3.PCJ(Primitive Collections for Java) - так же как и Trove

предназначены для примитивных типов, что позволит повысить эффективность.

4.Наконец Вы сами можете написать собственную

коллекцию (тот же связной список). Но данный подход

Lists

58

online.mirea.ru

не рекомендуется J

 

Центрдистанционногообучения

Другие Коллекции

Рекомендуется для начала необходимо освоить базовые коллекции Java которыми пользуются чаще всего.

А так же некоторые сторонние библиотеки реализуют интерфейсы Java Collections Framework (пример

Guava http://guavalibraries.googlecode.com/svn/tags/release05/javadoc/over view-tree.html). То есть знание иерархии классов

базовых коллекций позволит более быстро освоить сторонние библиотеки.

Lists

59

online.mirea.ru

 

 

Центрдистанционногообучения

Базовые интерфейсы

В библиотеке коллекций Java существует два базовых интерфейса, реализации которых и представляют

совокупность всех классов коллекций:

1)Collection - коллекция содержит набор объектов

(элементов)

2)Map - описывает коллекцию, состоящую из пар

"ключ — значение".

Хотя фреймворк называется Java Collections Framework, но интерфейс map и его реализации входят в фреймворк тоже !

Интерфейсы Collection и Map являются базовыми, но они не есть единственными.

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

Lists

60

online.mirea.ru