Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Коллекции в Java

Содержание

Что такое коллекции?Классы позволяющие хранить и производить операции над множеством объектов.java.lang.Iterable java.util.Collection java.util.List - список java.util.Set - множество java.util.Queue - очередь java.util.Map - карта, ассоциативный массив
Коллекции в JavaАнтон Авдеев Что такое коллекции?Классы позволяющие хранить и производить операции над множеством объектов.java.lang.Iterable	java.util.Collection		java.util.List		- список		java.util.Set		- Зачем нужны коллекции?Array         vs Методы коллекцийПроверки на вхождениеboolean contains(Object o); ─ одного элементаboolean containsAll(Collection c); ─ Методы коллекцийДобавление элементовboolean add(E e); ─ одного элементаboolean addAll(Collection c); ─ элементов Преобразование в массивObject[] toArray(); ─ создает новый массивObject[] toArray(Object[] a); ─ использует Итерированиеjava.lang.Iterable:методы Iterator iterator();boolean hasNext();T next();void remove();Сколько итераций будет выполнено?List list = new Стандартные коллекции Стандартные коллекции ArrayList ArrayListПри добавлении 11-го элементаArrayList может менять свой размер во время исполнения программыЭлементы ArrayListДобавление в «середину» списка происходит в три этапа: проверяется, достаточно ли места ArrayListИтоги — Быстрый доступ к элементам по индексу за время O(1); — LinkedList LinkedListЯвляется представителем двунаправленного списка, где каждый элемент структуры содержит указатели на предыдущий LinkedListДобавление элементов в «середину» списка LinkedList. Применение (FIFO)public class Queue {  private final LinkedList list = LinkedListИтоги — Из LinkedList можно организовать стэк, очередь, или двойную очередь, со HashCodeЕсли очень просто, то хеш-код — это число. Если более точно, то HashCode1. Для одного и того-же объекта, хеш-код всегда будет одинаковым HashCode2. Если объекты одинаковые, то и хеш-коды одинаковые (но не наоборот, см. правило 3). HashCode3. Если хеш-коды равны, то входные объекты не всегда равны (коллизия). HashCode4. Если хеш-коды разные, то и объекты гарантированно разные. ЭквивалентностьКаждый вызов оператора new порождает новый объект в памяти.public class BlackBox { ЭквивалентностьСоздадим класс для демонстрации BlackBox.public class DemoBlackBox {  public static void ЭквивалентностьСодержимое этих объектов одинаково, то есть эквивалентно. Для проверки эквивалентности в классе ЭквивалентностьПри сравнение объектов, операция “==” вернет true лишь в одном случае — Эквивалентностьpublic class DemoBlackBox {  public static void main(String[] args) { Эквивалентностьpublic class BlackBox {  ...  @Override  public int hashCode() Эквивалентностьpublic class BlackBox {  ...  @Override  public boolean equals(Object Эквивалентностьobject1.equals(object2);object1.hashCode() == object2.hashCode();Что выведется на экран в первом случае? Во втором? ЭквивалентностьТребования к реализации equals()reflexive. x.equals(x) == truesymmetric. Если x.equals(y) == true, то HashMap HashMapHashMap — основан на хэш-таблицах, реализует интерфейс Map (что подразумевает хранение данных HashMaphashCode()Поиск элемента по ключу происходит в 2 этапа: Поиск нужного контейнера (используя HashMapДобавление, получение, удаление элементовИтераторыhashmap.put( HashMapИтоги — Добавление элемента выполняется за время O(1); — Операции получения и HashSet HashSetВ множествах Set каждый элемент хранится только в одном экземпляре, а разные Лабораторная работаЗадание: Вычислить сколько раз каждая буква встречается в тексте.public class UniqueChars Лабораторная работаpublic class UniqueChars {  ...  public void calculate() { Лабораторная работаpublic class UniqueChars {  ...  @Override  public String Лабораторная работаОтдельный подсчет цифр;Подсчет в указанном регистре (верхнем, нижнем, не учитывать);interface Basket Лабораторная работаinterface Smartable {  public List removeInRange(List list, int element, int Лабораторная работаpublic List removeInRange(List list, int element, int start, int end)Который принимает Лабораторная работаpublic boolean isUnique(Map map);Который возвращает true, если в отображении нет двух Лабораторная работаpublic Map intersect(Map map1, Map map2);Который возвращает отображение, который содержит пары Лабораторная работаpublic int countCommon(List list1, List list2);Который возвращает количество уникальных совпавших значений Лабораторная работаpublic Set removeEvenLength(Set set);Который возвращает множество, в котором удалены все элементы Лабораторная работаpublic int maxOccurrences(List list);Который возвращает количество вхождений наиболее часто встречающегося элемента.Например, Источникиhttps://google.ruhttp://docs.oracle.com/javase/8/docs/api/index.htmlhttps://habrahabr.ru/hub/java
Слайды презентации

Слайд 2 Что такое коллекции?
Классы позволяющие хранить и производить операции

Что такое коллекции?Классы позволяющие хранить и производить операции над множеством объектов.java.lang.Iterable	java.util.Collection		java.util.List		-

над множеством объектов.
java.lang.Iterable
java.util.Collection
java.util.List - список
java.util.Set - множество
java.util.Queue - очередь
java.util.Map - карта, ассоциативный массив


Слайд 3 Зачем нужны коллекции?
Array

Зачем нужны коллекции?Array     vs  Collection- Типизация

vs Collection
- Типизация

данных - Безопасность типа хранимых данных на уровне компилятора - Фиксированный размер массива - Экономия памяти (примитивы) - Быстрый доступ к каждому элементу
- f.length

- Generics, либо Objects - Generics, либо приведение типов - Размер не фиксирован - Работа только с объектами - Скорость доступа зависит от способа имплементации коллекции - f.size()


Слайд 4 Методы коллекций
Проверки на вхождение
boolean contains(Object o); ─ одного

Методы коллекцийПроверки на вхождениеboolean contains(Object o); ─ одного элементаboolean containsAll(Collection c);

элемента
boolean containsAll(Collection c); ─ всех элементов коллекции c


Collection col

= new ArrayList();

If (col.isEmpty()) { … как правильно проверять пустоту коллекции?
If (col.size() != 0) {…

Определение размера
int size(); ─ количество элементов
boolean isEmpty(); ─ проверка на пустоту


Слайд 5 Методы коллекций


Добавление элементов
boolean add(E e); ─ одного элемента
boolean

Методы коллекцийДобавление элементовboolean add(E e); ─ одного элементаboolean addAll(Collection c); ─

addAll(Collection c); ─ элементов коллекции

Удаление элементов
boolean remove(Object o); ─

одного элемента
boolean removeAll(Collection c); ─ элементов коллекции
boolean retainAll(Collection c); ─ удаление элементов не из коллекции c
void clear(); ─ удаление всех элементов

Слайд 6 Преобразование в массив


Object[] toArray(); ─ создает новый массив
Object[]

Преобразование в массивObject[] toArray(); ─ создает новый массивObject[] toArray(Object[] a); ─

toArray(Object[] a); ─ использует переданный массив
list.add(“1”);
Foo[] foos = (Foo[])

list.toArray(new Foo[0]);
list.add(“2”);

Collection list = java.util.Arrays.asList(foos);


Слайд 7 Итерирование
java.lang.Iterable:
методы Iterator iterator();
boolean hasNext();
T next();
void remove();



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

Итерированиеjava.lang.Iterable:методы Iterator iterator();boolean hasNext();T next();void remove();Сколько итераций будет выполнено?List list =

выполнено?
List list = new ArrayList(30);

for (Object o : list)

{
System.out.println(o.toString());
}

for (Iterator iter = list.iterator(); iter.hasNext();) {
System.out.println(iter.next().toString());
}

Слайд 8 Стандартные коллекции

Стандартные коллекции

Слайд 9 Стандартные коллекции

Стандартные коллекции

Слайд 10 ArrayList


ArrayList

Слайд 11 ArrayList


При добавлении 11-го элемента
ArrayList может менять свой размер

ArrayListПри добавлении 11-го элементаArrayList может менять свой размер во время исполнения

во время исполнения программы
Элементы ArrayList могут быть абсолютно любых

типов в том числе и null

ArrayList list = new ArrayList<>();
list.add("0");


Слайд 12 ArrayList


Добавление в «середину» списка происходит в три этапа:

ArrayListДобавление в «середину» списка происходит в три этапа: проверяется, достаточно ли

проверяется, достаточно ли места в массиве;
2) подготавливается место для

нового элемента с помощью System.arraycopy();
3) перезаписывается значение у элемента с указанным индексом.

Удалять элементы можно двумя способами: — по индексу remove(index) — по значению remove(value)


Слайд 13 ArrayList


Итоги
— Быстрый доступ к элементам по индексу за

ArrayListИтоги — Быстрый доступ к элементам по индексу за время O(1);

время O(1);
— Доступ к элементам по значению за линейное

время O(n);
— Медленный, когда вставляются и удаляются элементы из «середины» списка;
— Позволяет хранить любые значения в том числе и null;
— Не синхронизирован.

Слайд 14 LinkedList


LinkedList

Слайд 15 LinkedList


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

LinkedListЯвляется представителем двунаправленного списка, где каждый элемент структуры содержит указатели на

содержит указатели на предыдущий и следующий элементы. Итератор поддерживает

обход в обе стороны.
Реализует методы получения, удаления и вставки в начало, середину и конец списка.
Позволяет добавлять любые элементы в том числе и null.

List list = new LinkedList<>();
list.add("0");
list.add("1");


Слайд 16 LinkedList


Добавление элементов в «середину» списка

LinkedListДобавление элементов в «середину» списка

Слайд 17 LinkedList. Применение (FIFO)







public class Queue {

private

LinkedList. Применение (FIFO)public class Queue { private final LinkedList list =

final LinkedList list = new LinkedList();

public void

put(Object v) {
list.addFirst(v);
}

public Object get() {
return list.removeLast();
}

public boolean isEmpty() {
return list.isEmpty();
}
}

Слайд 18 LinkedList


Итоги
— Из LinkedList можно организовать стэк, очередь, или

LinkedListИтоги — Из LinkedList можно организовать стэк, очередь, или двойную очередь,

двойную очередь, со временем доступа O(1);
— На вставку и

удаление из середины списка, получение элемента по индексу или значению потребуется линейное время O(n). Однако, на добавление и удаление из середины списка, используя ListIterator.add() и ListIterator.remove(), потребуется O(1);
— Позволяет добавлять любые значения в том числе и null. Для хранения примитивных типов использует соответствующие классы-оберки;
— Не синхронизирован.

Слайд 19 HashCode


Если очень просто, то хеш-код — это число.

HashCodeЕсли очень просто, то хеш-код — это число. Если более точно,

Если более точно, то это битовая строка фиксированной длины,

полученная из массива произвольной длины.

Ситуация, когда у разных объектов одинаковые хеш-коды называется — коллизией. Вероятность возникновения коллизии зависит от используемого алгоритма генерации хеш-кода.

Слайд 20 HashCode


1. Для одного и того-же объекта, хеш-код всегда

HashCode1. Для одного и того-же объекта, хеш-код всегда будет одинаковым

будет одинаковым


Слайд 21 HashCode


2. Если объекты одинаковые, то и хеш-коды одинаковые

HashCode2. Если объекты одинаковые, то и хеш-коды одинаковые (но не наоборот, см. правило 3).

(но не наоборот, см. правило 3).


Слайд 22 HashCode


3. Если хеш-коды равны, то входные объекты не

HashCode3. Если хеш-коды равны, то входные объекты не всегда равны (коллизия).

всегда равны (коллизия).


Слайд 23 HashCode


4. Если хеш-коды разные, то и объекты гарантированно

HashCode4. Если хеш-коды разные, то и объекты гарантированно разные.

разные.


Слайд 24 Эквивалентность


Каждый вызов оператора new порождает новый объект в

ЭквивалентностьКаждый вызов оператора new порождает новый объект в памяти.public class BlackBox

памяти.
public class BlackBox {

private int varA;

private int varB;

public BlackBox(int varA, int varB) {
this.varA = varA;
this.varB = varB;
}
}

Слайд 25 Эквивалентность


Создадим класс для демонстрации BlackBox.
public class DemoBlackBox {

ЭквивалентностьСоздадим класс для демонстрации BlackBox.public class DemoBlackBox { public static void

public static void main(String[] args) {

BlackBox object1 = new BlackBox(5, 10);
BlackBox object2 = new BlackBox(5, 10);
}
}

Слайд 26 Эквивалентность


Содержимое этих объектов одинаково, то есть эквивалентно. Для

ЭквивалентностьСодержимое этих объектов одинаково, то есть эквивалентно. Для проверки эквивалентности в

проверки эквивалентности в классе Object существует метод equals(), который

сравнивает содержимое объектов и выводит значение типа boolean true, если содержимое эквивалентно, и false — если нет.

object1.equals(object2);// должно быть true, поскольку содержимое объектов эквивалентно
object1.hashCode() == object2.hashCode()// должно быть true

Что выведется на экран в первом случае? Во втором?


Слайд 27 Эквивалентность


При сравнение объектов, операция “==” вернет true лишь

ЭквивалентностьПри сравнение объектов, операция “==” вернет true лишь в одном случае

в одном случае — когда ссылки указывают на один

и тот-же объект. В данном случае не учитывается содержимое полей.

public boolean equals(Object obj) {
return (this == obj);
}

public native int hashCode();


Слайд 28 Эквивалентность


public class DemoBlackBox {

public static void

Эквивалентностьpublic class DemoBlackBox { public static void main(String[] args) {

main(String[] args) {
...

BlackBox object3 = new BlackBox(5, 10);
BlackBox object4 = object3; // Переменная object4 ссылается на тот-же объект что и переменная object3
object3.equals(object4); // true
}
}

Слайд 29 Эквивалентность


public class BlackBox {

...

@Override

Эквивалентностьpublic class BlackBox { ... @Override public int hashCode() {

public int hashCode() {
final

int prime = 31;
int result = 1;
result = prime * result + varA;
result = prime * result + varB;
return result;
}
}

Слайд 30 Эквивалентность


public class BlackBox {
...
@Override

Эквивалентностьpublic class BlackBox { ... @Override public boolean equals(Object obj) {

public boolean equals(Object obj) {

if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BlackBox other = (BlackBox) obj;
if (varA != other.varA)
return false;
if (varB != other.varB)
return false;
return true;
}
}

Слайд 31 Эквивалентность


object1.equals(object2);
object1.hashCode() == object2.hashCode();
Что выведется на экран в первом

Эквивалентностьobject1.equals(object2);object1.hashCode() == object2.hashCode();Что выведется на экран в первом случае? Во втором?

случае? Во втором?


Слайд 32 Эквивалентность


Требования к реализации equals()

reflexive. x.equals(x) == true
symmetric. Если

ЭквивалентностьТребования к реализации equals()reflexive. x.equals(x) == truesymmetric. Если x.equals(y) == true,

x.equals(y) == true, то y.equals(x) должен быть тоже true.
transitive. Если

x.equals(y) == true и y.equals(z) == true, то результат x.equals(z) тоже должен быть true
consistent. Для любых объектов x и y, если их содержимое не изменяется, то множественный вызов x.equals(y) должен возвращать одно и тоже значение
Для x.equals(null) == false.

Слайд 33 HashMap


HashMap

Слайд 34 HashMap


HashMap — основан на хэш-таблицах, реализует интерфейс Map

HashMapHashMap — основан на хэш-таблицах, реализует интерфейс Map (что подразумевает хранение

(что подразумевает хранение данных в виде пар ключ/значение).
Ключи

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

Каждый HashMap содержит ряд свойств: table — массив типа Entry[], который является хранилищем ссылок на списки (цепочки) значений;
threshold — предельное количество элементов, при достижении которого, размер хэш-таблицы увеличивается вдвое.
size — количество элементов HashMap-а;

Map hashmap = new HashMap<>();


Слайд 35 HashMap


hashCode()
Поиск элемента по ключу происходит в 2 этапа:

HashMaphashCode()Поиск элемента по ключу происходит в 2 этапа: Поиск нужного контейнера

Поиск нужного контейнера (используя hashCode())
Поиск элемента в контейнере

(используя equals())

Слайд 36 HashMap


Добавление, получение, удаление элементов
Итераторы
hashmap.put("0", "zero");
hashmap.get(key);
hashmap.remove(key);
// 1
for (Map.Entry

HashMapДобавление, получение, удаление элементовИтераторыhashmap.put(

String> entry : hashmap.entrySet())
System.out.println(entry.getKey() + " =

" + entry.getValue());

// 2
for (String key : hashmap.keySet())
System.out.println(hashmap.get(key));

// 3
Iterator> itr = hashmap.entrySet().iterator();
while (itr.hasNext())
System.out.println(itr.next());

Слайд 37 HashMap


Итоги
— Добавление элемента выполняется за время O(1);
— Операции

HashMapИтоги — Добавление элемента выполняется за время O(1); — Операции получения

получения и удаления элемента могут выполняться за время O(1),

если хэш-функция равномерно распределяет элементы и отсутствуют коллизии;
— Ключи и значения могут быть любых типов, в том числе и null. Для хранения примитивных типов используются соответствующие классы-оберки;
— Не синхронизирован.

Слайд 38 HashSet


HashSet

Слайд 39 HashSet


В множествах Set каждый элемент хранится только в

HashSetВ множествах Set каждый элемент хранится только в одном экземпляре, а

одном экземпляре, а разные реализации Set используют разный порядок

хранения элементов.
Методы аналогичны методам ArrayList за исключением того, что метод add(Object o) добавляет объект в множество только в том случае, если его там нет.

Set intSet = new HashSet<>();
intSet.add(1);
intSet.add(4);
intSet.add(3);
intSet.add(1);
intSet.add(2);
intSet.add(3);
intSet.add(2);

[1, 2, 3, 4]

[3, 1, 4, 2]

[2, 4, 1, 3]


Слайд 40 Лабораторная работа


Задание: Вычислить сколько раз каждая буква встречается

Лабораторная работаЗадание: Вычислить сколько раз каждая буква встречается в тексте.public class

в тексте.
public class UniqueChars {

private Map

map = new HashMap<>();
private String text;

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

...
}

Слайд 41 Лабораторная работа


public class UniqueChars {
...

Лабораторная работаpublic class UniqueChars { ... public void calculate() {

public void calculate() {
for (char

c : text.toCharArray()) {
if (Character.isLetter(c)) {
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
}
}

...
}

Слайд 42 Лабораторная работа


public class UniqueChars {
...

Лабораторная работаpublic class UniqueChars { ... @Override public String toString() {

@Override
public String toString() {

String result = "";
for (Entry entry : map.entrySet()) {
result += "char: " + entry.getKey() +
"; count: " + entry.getValue() + "\n";
}
return result;
}
}

Слайд 43 Лабораторная работа


Отдельный подсчет цифр;
Подсчет в указанном регистре (верхнем,

Лабораторная работаОтдельный подсчет цифр;Подсчет в указанном регистре (верхнем, нижнем, не учитывать);interface

нижнем, не учитывать);
interface Basket {

void addProduct(String product,

int quantity);

void removeProduct(String product);

void updateProductQuantity(String product, int quantity);

void clear();

List getProducts();

int getProductQuantity(String product);

}

Реализовать класс корзины интернет магазина по следующему интерфейсу:


Слайд 44 Лабораторная работа


interface Smartable {

public List removeInRange(List

Лабораторная работаinterface Smartable { public List removeInRange(List list, int element, int

list, int element, int start, int end);

public

boolean isUnique(Map map);

public Map intersect(Map map1, Map map2);

public int countCommon(List list1, List list2);

public Set removeEvenLength(Set set);

public int maxOccurrences(List list);
}

Слайд 45 Лабораторная работа


public List removeInRange(List list, int element, int

Лабораторная работаpublic List removeInRange(List list, int element, int start, int end)Который

start, int end)
Который принимает на вход List, значение, стартовый

и конечный индекс).
Метод должен удалить все вхождения element между start (включительно) и end (исключительно) индексами. Вхождения вне этого индекса, а также другие значения должны остаться без изменений.
Например, если для списка
(0, 0, 2, 0, 4, 0, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16) вызвать метод removeInRange(list, 0, 5, 13) результат будет
(0, 0, 2, 0, 4, 6, 8, 10, 12, 0, 14, 0, 16).

Слайд 46 Лабораторная работа


public boolean isUnique(Map map);
Который возвращает true,

Лабораторная работаpublic boolean isUnique(Map map);Который возвращает true, если в отображении нет

если в отображении нет двух и более одинаковых value,

и false в противном случае.
Для пустого отображения метод возвращает true.
Например, для метода {Вася=Иванов, Петр=Петров, Виктор=Сидоров, Сергей=Савельев, Вадим=Викторов} метод вернет true,
а для {Вася=Иванов, Петр=Петров, Виктор=Иванов, Сергей=Савельев, Вадим=Петров} метод вернет false.

Слайд 47 Лабораторная работа


public Map intersect(Map map1, Map

Лабораторная работаpublic Map intersect(Map map1, Map map2);Который возвращает отображение, который содержит

map2);
Который возвращает отображение, который содержит пары «ключ=значение», присутствующие в

обоих отображениях.
Например, для отображений {Janet=87, Logan=62, Whitaker=46, Alyssa=100, Stefanie=80, Jeff=88, Kim=52, Sylvia=95}
и {Logan=62, Kim=52, Whitaker=52, Jeff=88, Stefanie=80, Brian=60, Lisa=83, Sylvia=87}
Метод вернет {Logan=62, Stefanie=80, Jeff=88, Kim=52} (не обязательно в этом порядке)

Слайд 48 Лабораторная работа


public int countCommon(List list1, List list2);
Который возвращает

Лабораторная работаpublic int countCommon(List list1, List list2);Который возвращает количество уникальных совпавших

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

[3, 7, 3, -1, 2, 3, 7, 2, 15, 15] и [-5, 15, 2, -1, 7, 15, 36] метод вернет 4, т.к. совпали элементы -1, 2, 7 и 15.
Обратите внимание, что второй раз 15 не считаются, т.к. нужно совпадение уникальных значений.

Слайд 49 Лабораторная работа


public Set removeEvenLength(Set set);
Который возвращает множество, в

Лабораторная работаpublic Set removeEvenLength(Set set);Который возвращает множество, в котором удалены все

котором удалены все элементы четной длины из исходного множества.
Например,

для множества ["foo", "buzz", "bar", "fork", "bort", "spoon", "!", "dude"] метод вернет ["foo", "bar", "spoon", "!"]

Слайд 50 Лабораторная работа


public int maxOccurrences(List list);
Который возвращает количество вхождений

Лабораторная работаpublic int maxOccurrences(List list);Который возвращает количество вхождений наиболее часто встречающегося

наиболее часто встречающегося элемента.
Например, для массива [4, 7, 4,

-1, 2, 4, 7, 2, 15, 15] метод вернет 3, т.к. наиболее часто встречающееся значение 4 имеет 3 вхождения в массив.

  • Имя файла: kollektsii-v-java.pptx
  • Количество просмотров: 170
  • Количество скачиваний: 0