JavaCollections

advertisement
Коллекции в Java
 Java Collections Framework
 Commons-collections
Коллекции в многопоточной среде
Принципы библиотеки коллекций
 Разделение:
 Интерфейсы (что нужно: определяют
функциональные свойства): List<E>, Map<K,V>,
Set<E>
 Реализации (как сделать: определяют
нефункциональные свойства): ArrayList<E>,
HashMap<K,V>
 Алгоритмы (что сделать над элементами
коллекции): sort, search, reverse, shuffle
 Повторное использование
 Удобное расширение (AbstractList, AbstractSet)
 Совместимость со старыми версиями
Интерфейсы коллекций
Collection
Set
SortedSet
Queue
Map
List
SortedMap
Что использовать?
1. Set
(множество)
a. Выбрать следующего дежурного
из списка учеников класса
2. List
(Список)
b. Найти студента по номеру
зачетки
3. Map
(Карта)
c. Добавить товар в корзину
интернет-магазина
4. Queue
(Очередь)
d. Стопка игральных карт
Реализации коллекций
Collection
Set
SortedSet
TreeSet
Queue
HashSet
Map
List
ArrayList
SortedMap
LinkedList
TreeMap
HashMap
Hash-коллекции
 HashMap<K,V>, HashSet<E>
 Поддержка hash-структур на уровне Object
 int hashCode()
 boolean equals()
Sorted-коллекции
 TreeSet<E>, TreeMap<K,V>
 Требуют определения функции сравнения
элементов одним из способов:
 Интерфейс Comparable<T>
 Интерфейс Comparator<T>
5
3
7
4
Алгоритмы работы с коллекциями
 Итерирование:
 Collection.iterator()
 List.listIterator()
 NavigableSet.descendingIterator()
 Сортировка: Collections.sort(List<T>)
 Поиск
 Collection.contains(Object key)
 List.indexOf(Object key)
 Collections.binarySearch(List<T>, T key)
 Collections.shuffle(), Collections.reverse(),
Collections.max(), Collections.min()
Какую реализацию выбрать?
1. HashMap
a. Быстро добавлять и удалять
элементы из списка
2. TreeMap
b. Считать количество посещений по
страницам сайта
3. ArrayList
c. Быстро искать N-й элемент списка
4. LinkedList
d. Быстро искать контракты по номеру
и выводить упорядоченные по дате
Комбинированные коллекции
 LinkedHashSet: HashSet + LinkedList
 LinkedHashMap: HashMap + LinkedList
Коллекции-обертки (wrappers)
 Позволяют изменить свойства существующей
реализации коллекции (без написания новой):
 Для безопасности работы в многопоточной
среде:
 Collections.synchronizedList(), …map, …set, …collection
 Для запрета изменения содержимого
коллекции:
 Collections.unmodifiableList(), …map, …set, …collection
Потокобезопасные коллекции
 Synchronized-обертки
 CopyOnWriteArrayList
 ConcurrentHashMap
Специализированные коллекции для multithreadingзадач
 LinkedBlockingQueue
 DelayQueue
 SynchronousQueue
Если не хватает java.util.*
 Apache commons collections
(http://commons.apache.org/collections)
 Google collections
(http://code.google.com/p/google-collections)
Задание
Реализовать класс корзины интернет магазина по следующему интерфейсу:
public interface Basket {
void
void
void
void
addProduct(String product, int quantity);
removeProduct(String product);
updateProductQuantity(String product, int quantity);
clear();
List<String> getProducts();
int getProductQuantity(String product);
}
Модель
(структура
хранения)
Тест
(сценарий
использования)
Реализация
Запуск теста
Задание №2
 /* Институтская библиотека */
 public interface Library {








 }
/* Регистрация новой книги */
void addNewBook(Book book);
/* Студент берет книгу */
void borrowBook(Book book, String student);
/* Студент возвращает книгу */
void returnBook(Book book, String student);
/* Получить список свободных книг */
List<Book> findAvailableBooks();
Ссылки
 Java collections tutorial
http://download.oracle.com/javase/tutorial/collections/in
dex.html
Download