
3-й семестр / Лекции / 8 - Презентация
.pdf
Центрдистанционногообучения
Маски
\\Метод компилируется
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 |
|
|