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
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