SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Noveo Summer School
Лекция 3. Коллекции,
многопоточность.
Коллекции
Коллекции2
Списки
Список — упорядоченная
последовательность, которая может
содержать повторы. Дополняет
интерфейс Collection операциями,
характерными для линейной структуры
(поиск индекса, обращение к элементу по
индексу, взятие подсписка).
Коллекции3
Списки
Реализации в Java
• LinkedList<E> — на основе двусвязного
списка, нужно применять, когда много
операций вставки в начало или середину
списка.
• ArrayList<E> — на основе массива,
эффективен при частых обращениях к
элементам с произвольным индексом.
• Vector<E> — старая реализация, тот же
ArrayList<E>, но потокобезопасный. Почти
не используется.
Коллекции4
Множества
Множество – набор неповторяющихся
элементов.
• HashSet<E> – множество на основе
Hash-таблицы.
• LinkedHashSet<E> – множество на
основе Hash-таблицы и двусвязного
списка.
• TreeSet<E> – множество на основе
красно-черного дерева (использует
Comparable или Comparator).
Коллекции5
Очереди
Queue<E> и Deque<E> — реализуют
однонаправленную и двунаправленную
очереди. LinkedList является одной из
реализаций.
• offer
• poll
• peek
Коллекции6
Словари (Maps)
Map – множество пар ключ-значение.
• HashMap<K,V> – основана на Hash-
таблице, не может содержать null в
качестве ключей или значений.
• TreeMap<K,V> - основана на красно-
черном дереве. Log(n) трудоемкость.
• Hashtable<K,V> - устаревшая
реализация, использовать НЕ НАДО.
Коллекции7
Iterator
Iterator – объект, который позволяет
последовательно проходить элементы коллекции.
List<String> list = new LinkedList<String>();
list.add("first");
list.add("second");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
}
Коллекции8
ListIterator
ListIterator – интерфейса-наследник Iterator,
позволяет проходить по элементам списка
как в прямом, так и в обратном
направлении.
Boolean hasNext();
E next();
Boolean hasPrevious();
E previous();
Коллекции9
Collections
Collections – класс, содержащий набор
вспомогательных статических методов.
Например:
sort(List<T> list);
swap(List<T>, int I, int j);
reverse(List<?> list);
fill(List<? super T>, T obj);
Коллекции10
Многопоточность
Как запустить код в другом
потоке
public class MyRunnable implements
Runnable {
@Override
public void run() {
System.out.println(“Hello World”);
}
}
Использование:
Thread thread = new Thread(new
MyRunnable());
thread.start(); Многопоточность11
Многопоточность
Как запустить код в другом
потокеpublic class MyThread extends Thread {
@Override
Public void run() {
System.out.println(“Hello world”);
}
};
Использование:
Thread thread = new MyThread();
thread.start();
Многопоточность12
Многопоточность
Sleep & interrupt
public class MyRunnable implements Runnable {
@Override
public void run() {
try {
for (int I = 0; I < 10; i++) {
Thread.sleep(2000);
System.out.println(“Hello World”);
}
} catch(InterruptedException e) {
System.out.println(“Thread has been interrupted”);
}
}
}
Использование
Thread thread = new Thread(new MyRunnable());
thread.start();
thread.interrupt();
Многопоточность13
Многопоточность
Join
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int I = 0; I < 10; i++) {
System.out.println(“Hello World”);
}
}
}
Использование:
Thread thread = new Thread(new MyRunnable());
thread.start();
thread.join();
Многопоточность14
Многопоточность
Проблема синхронизации
public class Counter {
private int counter = 0;
public void decrement() {
counter--;
}
public void increment() {
counter++;
}
}
Многопоточность15
Многопоточность
Synchronized
public class Counter {
private int counter = 0;
public synchronized void decrement() {
counter--;
}
public void increment() {
synchronized (this) {
counter++;
}
}
}
Многопоточность16
Многопоточность
Wait, notify, notifyAll
public class Box {
private boolean empty = true;
public synchronized void get() {
while(empty) {
try{
wait();
} catch(InterruptedException e){}
}
//do something important
empty = true;
notifyAll();
}
}
Многопоточность17
Многопоточность
Wait, notify, notifyAll
…
public synchronized void put() {
while(!empty) {
try{
wait();
} catch(InterruptedException e){}
}
//do something important
empty = false;
notifyAll();
}
Многопоточность18
Многопоточность
java.util.concurrent
• Lock objects
• Executors
• Concurrent collections
• Atomic variables
Многопоточность19
Материалы
По коллекциям:
• Oracle Tutorial:
http://docs.oracle.com/javase/tutorial/collections/in
dex.html
• Just Java: глава 16.
По многопоточности:
• Oracle Tutorial:
http://docs.oracle.com/javase/tutorial/essential/con
currency/index.html
• Just Java: главы 13, 14
Материалы20
Практическое задание
Необходимо реализовать классическую задачу
потребителей/производителей.
Суть задачи:
Существует некоторый буфер, который доступен из двух
потоков, буфер может содержать максимум 5 элементов.
Один поток (производитель) способен добавлять значения в
буфер, другой поток(потребитель) извлекать их из него.
Необходимо реализовать такое взаимодействие упомянутых
потоков, при котором потребитель будет осуществлять
попытку извлечения только в случае, если в буфере есть
хотя бы один элемент, а производитель будет записывать
значение в буфер, только если в нем менее 5 элементов.
Практическое задание21

Weitere ähnliche Inhalte

Was ist angesagt?

Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.Roman Brovko
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологииUnguryan Vitaliy
 
Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Roman Brovko
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILRoman Brovko
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.Roman Brovko
 
Лекция 6
Лекция 6Лекция 6
Лекция 6itc73
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collectionsMERA_school
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Roman Brovko
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stlmcroitor
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture libraryMERA_school
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Dima Dzuba
 
Objective-C 2.0: краткое описание языка и рантайма
Objective-C 2.0: краткое описание языка и рантаймаObjective-C 2.0: краткое описание языка и рантайма
Objective-C 2.0: краткое описание языка и рантаймаYandex
 

Was ist angesagt? (16)

Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
Лекция 6
Лекция 6Лекция 6
Лекция 6
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stl
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
Objective-C 2.0: краткое описание языка и рантайма
Objective-C 2.0: краткое описание языка и рантаймаObjective-C 2.0: краткое описание языка и рантайма
Objective-C 2.0: краткое описание языка и рантайма
 

Andere mochten auch

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииNoveo
 
Андрій Чипиленко "Розробка мобільного додатку для Comp-online.com.ua"
Андрій Чипиленко  "Розробка мобільного додатку для Comp-online.com.ua"Андрій Чипиленко  "Розробка мобільного додатку для Comp-online.com.ua"
Андрій Чипиленко "Розробка мобільного додатку для Comp-online.com.ua"Lviv Startup Club
 
Практика проектирования интерфейса для Android смартфонов
Практика проектирования интерфейса для Android смартфоновПрактика проектирования интерфейса для Android смартфонов
Практика проектирования интерфейса для Android смартфоновKonstantin Prokopov
 
JEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыJEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыdmalykhanov
 
GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android Madina Kamzina
 
Лекция Android. Хранение данных
Лекция Android. Хранение данныхЛекция Android. Хранение данных
Лекция Android. Хранение данныхАлександр Брич
 
Живые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеЖивые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеSergey Mikhaylov
 
Стас Городниченко - "Почему мобильная коммерция сейчас интересна для инвестор...
Стас Городниченко - "Почему мобильная коммерция сейчас интересна для инвестор...Стас Городниченко - "Почему мобильная коммерция сейчас интересна для инвестор...
Стас Городниченко - "Почему мобильная коммерция сейчас интересна для инвестор...ITGinGer
 
Разработка приложений для android
Разработка приложений для androidРазработка приложений для android
Разработка приложений для androidInfoShell
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderАлександр Брич
 
Material design full topics_animation
Material design full topics_animationMaterial design full topics_animation
Material design full topics_animationAnup Majumder
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Noveo
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Javametaform
 
Коллекции в Java
Коллекции в JavaКоллекции в Java
Коллекции в Javametaform
 

Andere mochten auch (20)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Андрій Чипиленко "Розробка мобільного додатку для Comp-online.com.ua"
Андрій Чипиленко  "Розробка мобільного додатку для Comp-online.com.ua"Андрій Чипиленко  "Розробка мобільного додатку для Comp-online.com.ua"
Андрій Чипиленко "Розробка мобільного додатку для Comp-online.com.ua"
 
Практика проектирования интерфейса для Android смартфонов
Практика проектирования интерфейса для Android смартфоновПрактика проектирования интерфейса для Android смартфонов
Практика проектирования интерфейса для Android смартфонов
 
JEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыJEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советы
 
GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android GTUG Almaty. Dependency Injection в Android
GTUG Almaty. Dependency Injection в Android
 
Fragments, ActionBar, Drawer
Fragments, ActionBar, DrawerFragments, ActionBar, Drawer
Fragments, ActionBar, Drawer
 
Лекция Android. Хранение данных
Лекция Android. Хранение данныхЛекция Android. Хранение данных
Лекция Android. Хранение данных
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
Лекция 2. Activity.
Лекция 2. Activity.Лекция 2. Activity.
Лекция 2. Activity.
 
Живые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеЖивые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. Продвижение
 
Стас Городниченко - "Почему мобильная коммерция сейчас интересна для инвестор...
Стас Городниченко - "Почему мобильная коммерция сейчас интересна для инвестор...Стас Городниченко - "Почему мобильная коммерция сейчас интересна для инвестор...
Стас Городниченко - "Почему мобильная коммерция сейчас интересна для инвестор...
 
Разработка приложений для android
Разработка приложений для androidРазработка приложений для android
Разработка приложений для android
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
Лекция 1. Введение в Android.
Лекция 1. Введение в Android.Лекция 1. Введение в Android.
Лекция 1. Введение в Android.
 
Material design full topics_animation
Material design full topics_animationMaterial design full topics_animation
Material design full topics_animation
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Java
 
Коллекции в Java
Коллекции в JavaКоллекции в Java
Коллекции в Java
 

Ähnlich wie Android - 03 - Multithreading, Collections

C# Desktop. Занятие 05.
C# Desktop. Занятие 05.C# Desktop. Занятие 05.
C# Desktop. Занятие 05.Igor Shkulipa
 
Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.Anton Moiseenko
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 
модуль 13 использование коллекций
модуль 13 использование коллекциймодуль 13 использование коллекций
модуль 13 использование коллекцийYevgeniy Gertsen
 
Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"LogeekNightUkraine
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.Igor Shkulipa
 
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...JetBrains Russia
 
Java осень 2013 лекция 2
Java осень 2013 лекция 2Java осень 2013 лекция 2
Java осень 2013 лекция 2Technopark
 
04 Стандартная Библиотека
04 Стандартная Библиотека04 Стандартная Библиотека
04 Стандартная Библиотекаphearnot
 
Msu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std LibsMsu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std Libsolegol
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8chashnikov
 
Персистентные структуры данных и архитектура
Персистентные структуры данных и архитектураПерсистентные структуры данных и архитектура
Персистентные структуры данных и архитектураVadim Shalts
 

Ähnlich wie Android - 03 - Multithreading, Collections (20)

C# Desktop. Занятие 05.
C# Desktop. Занятие 05.C# Desktop. Занятие 05.
C# Desktop. Занятие 05.
 
Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.Java Core. Lecture# 4. Collections.
Java Core. Lecture# 4. Collections.
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Lec 4
Lec 4Lec 4
Lec 4
 
модуль 13 использование коллекций
модуль 13 использование коллекциймодуль 13 использование коллекций
модуль 13 использование коллекций
 
Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"Sergii Tsypanov "Performance 1001 Tips"
Sergii Tsypanov "Performance 1001 Tips"
 
Java Generics: What it is and How to Implement it
Java Generics: What it is and How to Implement itJava Generics: What it is and How to Implement it
Java Generics: What it is and How to Implement it
 
Collections
CollectionsCollections
Collections
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
 
Lec 3
Lec 3Lec 3
Lec 3
 
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
 
Java осень 2013 лекция 2
Java осень 2013 лекция 2Java осень 2013 лекция 2
Java осень 2013 лекция 2
 
java
javajava
java
 
List - списки
List - списки List - списки
List - списки
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Thread
ThreadThread
Thread
 
04 Стандартная Библиотека
04 Стандартная Библиотека04 Стандартная Библиотека
04 Стандартная Библиотека
 
Msu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std LibsMsu.Center.Lectures.J04 Std Libs
Msu.Center.Lectures.J04 Std Libs
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8
 
Персистентные структуры данных и архитектура
Персистентные структуры данных и архитектураПерсистентные структуры данных и архитектура
Персистентные структуры данных и архитектура
 

Mehr von Noveo

Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Noveo
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Noveo
 
Yii2
Yii2Yii2
Yii2Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизацияNoveo
 
Rest
RestRest
RestNoveo
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP AdvancedNoveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQLNoveo
 
MySQL
MySQLMySQL
MySQLNoveo
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Noveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)Noveo
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Noveo
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Noveo
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Noveo
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 

Mehr von Noveo (20)

Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 

Android - 03 - Multithreading, Collections

  • 1. Noveo Summer School Лекция 3. Коллекции, многопоточность.
  • 3. Списки Список — упорядоченная последовательность, которая может содержать повторы. Дополняет интерфейс Collection операциями, характерными для линейной структуры (поиск индекса, обращение к элементу по индексу, взятие подсписка). Коллекции3
  • 4. Списки Реализации в Java • LinkedList<E> — на основе двусвязного списка, нужно применять, когда много операций вставки в начало или середину списка. • ArrayList<E> — на основе массива, эффективен при частых обращениях к элементам с произвольным индексом. • Vector<E> — старая реализация, тот же ArrayList<E>, но потокобезопасный. Почти не используется. Коллекции4
  • 5. Множества Множество – набор неповторяющихся элементов. • HashSet<E> – множество на основе Hash-таблицы. • LinkedHashSet<E> – множество на основе Hash-таблицы и двусвязного списка. • TreeSet<E> – множество на основе красно-черного дерева (использует Comparable или Comparator). Коллекции5
  • 6. Очереди Queue<E> и Deque<E> — реализуют однонаправленную и двунаправленную очереди. LinkedList является одной из реализаций. • offer • poll • peek Коллекции6
  • 7. Словари (Maps) Map – множество пар ключ-значение. • HashMap<K,V> – основана на Hash- таблице, не может содержать null в качестве ключей или значений. • TreeMap<K,V> - основана на красно- черном дереве. Log(n) трудоемкость. • Hashtable<K,V> - устаревшая реализация, использовать НЕ НАДО. Коллекции7
  • 8. Iterator Iterator – объект, который позволяет последовательно проходить элементы коллекции. List<String> list = new LinkedList<String>(); list.add("first"); list.add("second"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String next = iterator.next(); System.out.println(next); } Коллекции8
  • 9. ListIterator ListIterator – интерфейса-наследник Iterator, позволяет проходить по элементам списка как в прямом, так и в обратном направлении. Boolean hasNext(); E next(); Boolean hasPrevious(); E previous(); Коллекции9
  • 10. Collections Collections – класс, содержащий набор вспомогательных статических методов. Например: sort(List<T> list); swap(List<T>, int I, int j); reverse(List<?> list); fill(List<? super T>, T obj); Коллекции10
  • 11. Многопоточность Как запустить код в другом потоке public class MyRunnable implements Runnable { @Override public void run() { System.out.println(“Hello World”); } } Использование: Thread thread = new Thread(new MyRunnable()); thread.start(); Многопоточность11
  • 12. Многопоточность Как запустить код в другом потокеpublic class MyThread extends Thread { @Override Public void run() { System.out.println(“Hello world”); } }; Использование: Thread thread = new MyThread(); thread.start(); Многопоточность12
  • 13. Многопоточность Sleep & interrupt public class MyRunnable implements Runnable { @Override public void run() { try { for (int I = 0; I < 10; i++) { Thread.sleep(2000); System.out.println(“Hello World”); } } catch(InterruptedException e) { System.out.println(“Thread has been interrupted”); } } } Использование Thread thread = new Thread(new MyRunnable()); thread.start(); thread.interrupt(); Многопоточность13
  • 14. Многопоточность Join public class MyRunnable implements Runnable { @Override public void run() { for (int I = 0; I < 10; i++) { System.out.println(“Hello World”); } } } Использование: Thread thread = new Thread(new MyRunnable()); thread.start(); thread.join(); Многопоточность14
  • 15. Многопоточность Проблема синхронизации public class Counter { private int counter = 0; public void decrement() { counter--; } public void increment() { counter++; } } Многопоточность15
  • 16. Многопоточность Synchronized public class Counter { private int counter = 0; public synchronized void decrement() { counter--; } public void increment() { synchronized (this) { counter++; } } } Многопоточность16
  • 17. Многопоточность Wait, notify, notifyAll public class Box { private boolean empty = true; public synchronized void get() { while(empty) { try{ wait(); } catch(InterruptedException e){} } //do something important empty = true; notifyAll(); } } Многопоточность17
  • 18. Многопоточность Wait, notify, notifyAll … public synchronized void put() { while(!empty) { try{ wait(); } catch(InterruptedException e){} } //do something important empty = false; notifyAll(); } Многопоточность18
  • 19. Многопоточность java.util.concurrent • Lock objects • Executors • Concurrent collections • Atomic variables Многопоточность19
  • 20. Материалы По коллекциям: • Oracle Tutorial: http://docs.oracle.com/javase/tutorial/collections/in dex.html • Just Java: глава 16. По многопоточности: • Oracle Tutorial: http://docs.oracle.com/javase/tutorial/essential/con currency/index.html • Just Java: главы 13, 14 Материалы20
  • 21. Практическое задание Необходимо реализовать классическую задачу потребителей/производителей. Суть задачи: Существует некоторый буфер, который доступен из двух потоков, буфер может содержать максимум 5 элементов. Один поток (производитель) способен добавлять значения в буфер, другой поток(потребитель) извлекать их из него. Необходимо реализовать такое взаимодействие упомянутых потоков, при котором потребитель будет осуществлять попытку извлечения только в случае, если в буфере есть хотя бы один элемент, а производитель будет записывать значение в буфер, только если в нем менее 5 элементов. Практическое задание21