Параметризация типов в Java

Содержание

Слайд 2

public class BoxDemo
{public static void main(String[ ] args)
{ Box integerBox

public class BoxDemo {public static void main(String[ ] args) { Box integerBox
= new Box();

integerBox.add("10");
...
Integer someInteger = (Integer)integerBox.get();
System.out.println(someInteger); }
}

Ошибка, связанная с отсутствием параметризации:

Параметризация типов в Java

Слайд 3

Exception in thread "main"
java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at
at BoxDemo.main(BoxDemo.java:6)

Параметризация типов в Java

Слайд 4

public class Box
{ private T t; // T stands for "Type"

public class Box { private T t; // T stands for "Type"

public void add(T t)
{ this.t = t; }
public T get()
{ return t; }
}

Параметризованный класс (generic type):

- type variable, formal type parameter

Параметризация типов в Java

Слайд 5

Создание объекта параметризованного класса
(generic type invocation):
Box integerBox = new Box();

public class BoxDemo

Создание объекта параметризованного класса (generic type invocation): Box integerBox = new Box

{public static void main(String[ ] args)
{ Box integerBox = new Box();
integerBox.add(new Integer(10));
Integer someInteger = integerBox.get(); //no cast!
integerBox.add("10"); }
}

Параметризация типов в Java

Слайд 6

BoxDemo3.java:5: add(java.lang.Integer) in
Box cannot be applied to
(java.lang.String) integerBox.add("10");
^
1

BoxDemo3.java:5: add(java.lang.Integer) in Box cannot be applied to (java.lang.String) integerBox.add("10"); ^ 1
error

Таким образом вместо исключения (runtime error) получаем
compilation error !!!

Параметризация типов в Java

Слайд 7

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

Параметризованный класс может иметь несколько параметров, но они должны обозначаться разными буквами.
Box - error!
class Box - ok!

Параметризация типов в Java

Слайд 8

Параметризованные методы

public class Box
{ private T t;
public void

Параметризованные методы public class Box { private T t; public void add(T
add(T t)
{ this.t = t; }
public T get()
{ return t; }
public void inspect(U u)
{System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName()); }
}

Параметризация типов в Java

Слайд 9

Параметризованные методы

public static void main(String[ ] args)
{ Box integerBox =

Параметризованные методы public static void main(String[ ] args) { Box integerBox =
new Box();
integerBox.add(new Integer(10));
integerBox.inspect("some text");
}

Вывод:
T: java.lang.Integer
U: java.lang.String

Параметризация типов в Java

Слайд 10

Ограниченная параметризация (bounded type parameters)

public void inspect(U u)

Ограниченная параметризация (bounded type parameters) public void inspect(U u) {System.out.println("T: " +
{System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName()); }

public static void main(String[ ] args)
{ Box integerBox = new Box();
integerBox.add(new Integer(10));
integerBox.inspect("some text"); //error!!!
}

Параметризация типов в Java

Слайд 11

Ограниченная параметризация (bounded type parameters)

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

Ограниченная параметризация (bounded type parameters) Extends в данном случае понимается и как
extends и
как implements:

public void inspect(U u)
{System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName()); }

Параметризация типов в Java

Слайд 12

Подтипизация

Box box = new Box();
box.add(new Integer(10)); // OK
box.add(new Double(10.1)); // OK

public

Подтипизация Box box = new Box (); box.add(new Integer(10)); // OK box.add(new
void boxTest (Box n)
{

}

Параметризация типов в Java

Слайд 13

Подтипизация

Box IntegerBox = new Box();
Box DoubleBox = new Box();
boxTest(IntegerBox ); //error!
boxTest(DoubleBox

Подтипизация Box IntegerBox = new Box (); Box DoubleBox = new Box
); //error!

Причина ошибки - Box и Box не
являются подтипами Box !!!

Параметризация типов в Java

Слайд 14

Wildcards

Box someBox = ...; //upper bound
Box someBox

Wildcards Box someBox = ...; //upper bound Box someBox = ...; //lower
= ...; //lower bound
Box someBox = ...; //unbounded wildcard
Box someBox = ...; //unbounded wildcard

Box и Box не являются подтипами
Box, но являются подтипами Box

Параметризация типов в Java

Слайд 15

Wildcards

Box someBox = new Box();
Box IntegerBox = new Box();
Box

Wildcards Box someBox = new Box (); Box IntegerBox = new Box
DoubleBox = new Box();
someBox = IntegerBox;
someBox = DoubleBox;

Параметризация типов в Java

Слайд 16

Wildcards

public void boxTest (Box n)
{

}
Box IntegerBox =

Wildcards public void boxTest (Box n) { … } Box IntegerBox =
new Box();
Box DoubleBox = new Box();
boxTest(IntegerBox ); //ok!
boxTest(DoubleBox ); //ok!

Параметризация типов в Java

Слайд 17

Очистка типа (Type erasure)

На этапе компиляции вся информация о
параметризованных типах

Очистка типа (Type erasure) На этапе компиляции вся информация о параметризованных типах
удаляется.
Это позволяет сохранить совместимость на
уровне байт-кода с обычными типами.
Следствие: нельзя получить информацию о
параметризованном типе во время выполнения.

Параметризация типов в Java

Слайд 18

Очистка типа (Type erasure)

public class MyClass {
public void myMethod(Object item)

Очистка типа (Type erasure) public class MyClass { public void myMethod(Object item)
{
if (item instanceof E) //Compiler error
{ ... }
E item2 = new E(); //Compiler error
E[ ] iArray = new E[10]; //Compiler error
E obj = (E)new Object(); //Unchecked cast warning }
}

Параметризация типов в Java

Слайд 19

Очистка типа (Type erasure)

public class WarningDemo
{
public static void main(String[

Очистка типа (Type erasure) public class WarningDemo { public static void main(String[
] args)
{ Box bi;
bi = createBox(); }
static Box createBox()
{ return new Box(); }
}

Параметризация типов в Java

Слайд 20

Очистка типа (Type erasure)

WarningDemo.java:4: warning: [unchecked] unchecked conversion
found : Box
required: Box

Очистка типа (Type erasure) WarningDemo.java:4: warning: [unchecked] unchecked conversion found : Box
bi = createBox();
^
1 warning

Параметризация типов в Java

Слайд 21

Библиотека классов Java

Коллекции. Структура коллекций

Коллекция – это объект-контейнер, включающий группу, как
правило,

Библиотека классов Java Коллекции. Структура коллекций Коллекция – это объект-контейнер, включающий группу,
однотипных объектов. Структура коллекций
(collections framework) Java стандартизирует способ, с
помощью которого ваши программы хранят и обрабатывают
группы объектов.

Структура коллекций

Интерфейсы

Реализации

Алгоритмы

Слайд 22

Библиотека классов Java

Коллекции. Структура коллекций

Преимущества использования структуры коллекций:
Избавление от рутинных операций по

Библиотека классов Java Коллекции. Структура коллекций Преимущества использования структуры коллекций: Избавление от
кодированию стандартных структур данных и алгоритмов
Высокая эффективность реализации
Универсальность и простота изучения(различные типы коллекций работают похожим друг на друга образом и с высокой степенью способности к взаимодействию)
Расширяемость
Структура коллекций находится в пакете java.util.*

Слайд 23

Библиотека классов Java

Коллекции. Интерфейсы

Все коллекции в Java являются параметризованными
public interface Collection...

Библиотека классов Java Коллекции. Интерфейсы Все коллекции в Java являются параметризованными public interface Collection ...

Слайд 24

Библиотека классов Java

Коллекции. Интерфейс Collection

public interface Collection extends Iterable
{ int size();

Библиотека классов Java Коллекции. Интерфейс Collection public interface Collection extends Iterable {
boolean isEmpty();
boolean contains(Object element);
boolean add(E element);
boolean remove(Object element);
Iterator iterator();

Корень иерархии. Задает самые общие методы для
работы с коллекциями.

Слайд 25

Библиотека классов Java

Коллекции. Интерфейс Collection


boolean containsAll(Collection c);
boolean addAll(Collection

Библиотека классов Java Коллекции. Интерфейс Collection … boolean containsAll(Collection c); boolean addAll(Collection
E> c);
boolean removeAll(Collection c);
boolean retainAll(Collection c);
void clear();
Object[ ] toArray();
}

Слайд 26

Библиотека классов Java

Коллекции. Перемещение по коллекции

1. For-each
for (Object o : collection)
System.out.println(o);
2.

Библиотека классов Java Коллекции. Перемещение по коллекции 1. For-each for (Object o
public interface Iterator
{
boolean hasNext();
E next();
void remove();
}

Слайд 27

Библиотека классов Java

Коллекции. Перемещение по коллекции

Collection cs = new ArrayList();
cs.add("1");
cs.add("2");
cs.add("3");
for

Библиотека классов Java Коллекции. Перемещение по коллекции Collection cs = new ArrayList
(String str : cs)
System.out.println(str);

Слайд 28

Библиотека классов Java

Коллекции. Перемещение по коллекции

Collection cs = new ArrayList();
cs.add("1");
cs.add("2");
cs.add("3");
Iterator

Библиотека классов Java Коллекции. Перемещение по коллекции Collection cs = new ArrayList
it = cs.iterator();
while(it.hasNext())
System.out.println(it.next());

Слайд 29

Библиотека классов Java

Коллекции. Перемещение по коллекции

Метод remove() может быть вызван только один

Библиотека классов Java Коллекции. Перемещение по коллекции Метод remove() может быть вызван
раз
после вызова методы next(), иначе бросается исключение.
Метод remove() единственный безопасный способ
модификации коллекции.

static void filter(Collection c) {
for (Iterator it = c.iterator(); it.hasNext(); )
if (!cond(it.next()))
it.remove();
}

Слайд 30

Библиотека классов Java

Коллекции. Интерфейс Set

Set – коллекция без повторяющихся элементов
(математическое множество).

Библиотека классов Java Коллекции. Интерфейс Set Set – коллекция без повторяющихся элементов
Методы
совпадают с Collection но add() вернет false,
если элемент уже есть в коллекции.

Слайд 31

Библиотека классов Java

Коллекции. Интерфейс Set

import java.util.*;
public class FindDups {
public static void

Библиотека классов Java Коллекции. Интерфейс Set import java.util.*; public class FindDups {
main(String[ ] args) {
Set s = new HashSet();
for (String a : args)
if (!s.add(a))
System.out.println("Duplicate detected: " + a);
System.out.println(s.size() + " distinct words: " + s);
}
}

Слайд 32

Библиотека классов Java

Коллекции. Интерфейс SortedSet

Интерфейс SortedSet из пакета java.util,
расширяющий интерфейс Set,

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

Слайд 33

Библиотека классов Java

Коллекции. Интерфейс SortedSet

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

Библиотека классов Java Коллекции. Интерфейс SortedSet • Comparator Comparator() — возвращает способ
() — возвращает первый, меньший элемент коллекции;
• Object last() — возвращает последний, больший элемент коллекции;

Слайд 34

Библиотека классов Java

Коллекции. Интерфейс SortedSet

SortedSet headSet (Object toElement) — возвращает начальные, меньшие

Библиотека классов Java Коллекции. Интерфейс SortedSet SortedSet headSet (Object toElement) — возвращает
элементы до элемента toElement исключительно;
SortedSet subSet(Object fromElement, Object toElement) — возвращает подмножество коллекции от элемента fromElement включительно до элемента toElement исключительно;
SortedSet tailSet (Object fromElement) — возвращает последние, большие элементы коллекции от элемента fromElement включительно.

Слайд 35

Библиотека классов Java

Коллекции. Интерфейс Comparator

• int compare (Object obj1, object obj2) — возвращает

Библиотека классов Java Коллекции. Интерфейс Comparator • int compare (Object obj1, object
отрицательное число, если obj1 в каком-то смысле меньше obj2; нуль, если они считаются равными; положительное число, если objl больше obj2. С точки зрения теории множеств можно сказать, что этот метод сравнения обладает свойствами тождества, антисимметричности и транзитивности;
• boolean equals (Object obj) — сравнивает данный объект с объектом obj, возвращая true, если объекты совпадают в каком-либо смысле, заданном этим методом.

Слайд 36

Библиотека классов Java

Коллекции. Интерфейс Comparator

class ComplexCompare implements Comparator
{public int compare(Object obj1, Object

Библиотека классов Java Коллекции. Интерфейс Comparator class ComplexCompare implements Comparator {public int
obj2)
{Complex z1 = (Complex)obj1, z2 = (Complex)obj2;
double re1 = z1.getRe(), im1 = z1.getlm();
double re2 = z2.getRe(), im2 = z2.getlm();
if (re1 != re2) return (int)(re1 - re2);
else if (im1 != im2) return (int)(im1 — im2) ;
else return 0;}
public boolean equals(Object z)
{return compare (this, z) == 0;}
}

Слайд 37

Библиотека классов Java

Коллекции. Интерфейс Comparator

TreeSet ts = new TreeSet(new ComplexCompare());
ts.add(new Complex(1.2, 3.4));
ts.add(new

Библиотека классов Java Коллекции. Интерфейс Comparator TreeSet ts = new TreeSet(new ComplexCompare());
Complex(-1.25, 33.4));
ts.add(new Complex(1.23, -3.45));
ts.add(new Complex(16.2, 23.4));
Iterator it = ts.iterator();
while(it.hasNext())
((Complex)it.next()).print();

Слайд 38

Библиотека классов Java

Коллекции. Интерфейс List

Интерфейс List из пакета java.util,
расширяющий интерфейс Collection,

Библиотека классов Java Коллекции. Интерфейс List Интерфейс List из пакета java.util, расширяющий

описывает методы работы с упорядоченными
коллекциями. Иногда их называют
последовательностями (sequence). Элементы
такой коллекции пронумерованы, начиная от
нуля, к ним можно обратиться по индексу. В
отличие от коллекции Set элементы коллекции
List могут повторяться.

Слайд 39

Библиотека классов Java

Коллекции. Интерфейс List

• void add(int index, Object obj) — вставляет элемент

Библиотека классов Java Коллекции. Интерфейс List • 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 в коллекции;

Слайд 40

Библиотека классов Java

Коллекции. Интерфейс List

• int lastIndexOf (Object obj) — возвращает индекс последнего

Библиотека классов Java Коллекции. Интерфейс List • int lastIndexOf (Object obj) —
появления элемента obj в коллекции;
• ListIterator listIterator() — возвращает итератор коллекции;
• ListIterator listIterator (int index) — возвращает итератор конца коллекции от позиции index;
• Object set (int index, Object obj) — заменяет элемент, находящийся в позиции index, элементом obj;
• List subList(int from, int to) — возвращает часть коллекции от позиции from включительно до позиции to исключительно.

Слайд 41

Библиотека классов Java

Коллекции. Интерфейс ListIterator

• void add(Object element) — добавляет элемент element перед

Библиотека классов Java Коллекции. Интерфейс ListIterator • void add(Object element) — добавляет
текущим элементом;
• boolean hasPrevious() — возвращает true, если в коллекции есть элементы, стоящие перед текущим элементом;
• int nextIndex() — возвращает индекс текущего элемента; если текущим является последний элемент коллекции, возвращает размер коллекции;

Слайд 42

Библиотека классов Java

Коллекции. Интерфейс ListIterator

• Object previous() — возвращает предыдущий элемент и делает

Библиотека классов Java Коллекции. Интерфейс ListIterator • Object previous() — возвращает предыдущий
его текущим;
• int previousIndex() — возвращает индекс предыдущего элемента;
• void set(Object element) — заменяет текущий элемент элементом element; выполняется сразу после next() или previous().

Слайд 43

Библиотека классов Java

Коллекции. Интерфейс Map

Интерфейс Map из пакета java.util описывает
коллекцию, состоящую из

Библиотека классов Java Коллекции. Интерфейс Map Интерфейс Map из пакета java.util описывает
пар "ключ — значение".
У каждого ключа только одно значение, что
соответствует математическому понятию
однозначной функции или отображения. Такую
коллекцию часто называют еще словарем
(dictionary) или ассоциативным массивом
(associative array).

Слайд 44

Библиотека классов Java

Коллекции. Интерфейс Map

• boolean containsKey (Object key) — Проверяет наличие ключа

Библиотека классов Java Коллекции. Интерфейс Map • boolean containsKey (Object key) —
key;
• boolean containsValue (Object value) — Проверяет наличие значения value;
• Set entrySet() — представляет коллекцию в виде множества, каждый элемент которого — пара из данного отображения, с которой можно работать методами вложенного интерфейса Map.Entry;
• Object get(Object key) -— возвращает значение, отвечающее ключу key;

Слайд 45

Библиотека классов Java

Коллекции. Интерфейс Map

• Set keySet() — представляет ключи коллекции в виде

Библиотека классов Java Коллекции. Интерфейс Map • Set keySet() — представляет ключи
множества;
• Object put (Object key, Object value) — добавляет пару "key— value", если такой пары не было, и заменяет значение ключа key, если такой ключ уже есть в коллекции;
• void putAll (Map m) — добавляет к коллекции все пары из отображения m;
• Collection values() — представляет все значения в виде коллекции.

Слайд 46

Библиотека классов Java

Коллекции. Интерфейс Map.Entry

• методы getKey() и getValue() позволяют получить ключ и

Библиотека классов Java Коллекции. Интерфейс Map.Entry • методы getKey() и getValue() позволяют
значение пары;
• метод setValue (Object value) меняет значение в данной паре.

for (Iterator it=map.entrySet().iterator(); it.hasNext(); )
{
Map.Entry entry = (Map.Entry)it.next();
Object key = entry.getKey();
Object value = entry.getValue();
}

Слайд 47

Библиотека классов Java

Коллекции. Интерфейс SortedMap

Интерфейс SortedMap, расширяющий интерфейс
Map, описывает упорядоченную по

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

Слайд 48

Библиотека классов Java

Коллекции. Интерфейс SortedMap

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

Библиотека классов Java Коллекции. Интерфейс SortedMap • Comparator comparator() — возвращает способ
— возвращает первый, меньший элемент коллекции;
• SortedMap headMap (Object toKey) — Возвращает начало коллекции до элемента с ключом toKеу исключительно;
• Object lastKey() — возвращает последний, больший ключ коллекции;

Слайд 49

Библиотека классов Java

Коллекции. Интерфейс SortedMap

• SortedMap subMap (Object fromKey, Object toKey) — возвращает

Библиотека классов Java Коллекции. Интерфейс SortedMap • SortedMap subMap (Object fromKey, Object
часть коллекции от элемента с ключом fromKey включительно до элемента с ключом toKey исключительно;
• SortedMap tailMap(Object fromKey) — возвращает остаток коллекции от элемента fromKey включительно.

Слайд 50

Библиотека классов Java

Коллекции. Реализации

Библиотека классов Java Коллекции. Реализации

Слайд 51

Библиотека классов Java

Коллекции. Реализации

Библиотека классов Java Коллекции. Реализации

Слайд 52

Библиотека классов Java

Коллекции. Алгоритмы сортировки

Сортировка может быть сделана только в
упорядочиваемой коллекции,

Библиотека классов Java Коллекции. Алгоритмы сортировки Сортировка может быть сделана только в
реализующей
интерфейс List. Методы:
• static void sort (List coll) — сортирует в естественном порядке возрастания коллекцию coll, реализующую интерфейс List;
• static void sort (List coll, Comparator с) — сортирует коллекцию coll в порядке, заданном объектом с.

Слайд 53

Библиотека классов Java

Коллекции. Алгоритмы сортировки

Сортировка является быстрой и стабильной:
гарантирована скорость не ниже

Библиотека классов Java Коллекции. Алгоритмы сортировки Сортировка является быстрой и стабильной: гарантирована
n*log(n)
равные элементы не переупорядочиваются

public class Sort {
public static void main(String[ ] args) {
List list = Arrays.asList(args);
Collections.sort(list);
System.out.println(list);
}
}

Слайд 54

Библиотека классов Java

Коллекции. Алгоритмы поиска

• static int binarySearch(List coll, Object element) — отыскивает

Библиотека классов Java Коллекции. Алгоритмы поиска • static int binarySearch(List coll, Object
элемент element в отсортированной в естественном порядке возрастания коллекции coll и возвращает индекс элемента или отрицательное число, если элемент не найден; отрицательное число показывает индекс, с которым элемент element был бы вставлен в коллекцию, с обратным знаком;
• static int binarySearch(List coll, Object element. Comparator с) — то же, но коллекция отсортирована в порядке, определенном объектом с.

Слайд 55

Библиотека классов Java

Коллекции. Алгоритмы «перемешивания»

• static void shuffle (List coll) — случайные числа

Библиотека классов Java Коллекции. Алгоритмы «перемешивания» • static void shuffle (List coll)
задаются по умолчанию;
• static void shuffle (List coll, Random r) — случайные числа определяются объектом r.

Слайд 56

Библиотека классов Java

Коллекции. Алгоритмы манипуляции с данными

static void reverse(List coll) меняет порядок

Библиотека классов Java Коллекции. Алгоритмы манипуляции с данными static void reverse(List coll)
расположения элементов на обратный.
static void copy(List from, List to) копирует коллекцию from в коллекцию to.
static void fill(List coll, Object element) заменяет все элементы существующей коллекции coll элементом element.
static void swap(List coll, int i1, int i2) меняет местами элементы

Слайд 57

Библиотека классов Java

Коллекции. Алгоритмы экстремумов

static Object max (Collection coll) – возвращает наибольший

Библиотека классов Java Коллекции. Алгоритмы экстремумов static Object max (Collection coll) –
в естественном порядке элемент коллекции coll;
static Object max (Collection coll, Comparator c) — то же в порядке, заданном объектом с;
static Object min (Collection coll) — возвращает наименьший в естественном порядке элемент коллекции coll;
static Object min (Collection coil, Comparator c) — то же в порядке, заданном объектом с.
Имя файла: Параметризация-типов-в-Java.pptx
Количество просмотров: 158
Количество скачиваний: 0