Коллекции в 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