Java Collections Framework Commons-collections Коллекции в многопоточной среде Коллекции в Java
Принципы библиотеки коллекций Разделение : Интерфейсы ( что нужно : функциональные свойства ): List, Map, Set Реализации ( как сделать : нефункциональные свойства ): ArrayList, HashMap Алгоритмы ( что сделать над элементами коллекции ): sort, search, reverse, shuffle Повторное использование Удобное расширение (AbstractList, AbstractSet) Совместимость со старыми версиями
Интерфейсы коллекций CollectionSetSortedSetQueueListMapSortedMap
Что использовать ? 1. Set ( множество ) 2. List ( Список ) 3. Map ( Карта ) 4. Queue ( Очередь ) a. Выбрать следующего дежурного из списка учеников класса b. Найти студента по номеру зачетки c. Добавить товар в корзину интернет - магазина d. Стопка игральных карт
Реализации коллекций CollectionSetSortedSetTreeSetHashSetQueueListArrayListLinkedListMapSortedMapTreeMapHashMap
Hash- коллекции HashMap, HashSet Поддержка hash- структур на уровне Object int hashCode() boolean equals()
Sorted- коллекции TreeSet, TreeMap По какому критерию сортировать ? Интерфейс Comparable Интерфейс Comparator
Алгоритмы работы с коллекциями Итерирование : Collection.iterator() List.listIterator() NavigableSet.descendingIterator() Сортировка : Collections.sort(List ) Поиск Collection.contains(Object key) List.indexOf(Object key) Collections.binarySearch(List, T key) Collections.shuffle(), Collections.reverse(), Collections.max(), Collections.min()
Какую реализацию выбрать ? 1. HashMap2. TreeMap3. ArrayList4. LinkedList a. Быстро добавлять и удалять элементы из списка b. Считать количество посещений по страницам сайта c. Быстро искать N- й элемент списка d. Быстро искать контракты по номеру и выводить упорядоченные по дате
Комбинированные коллекции LinkedHashSet LinkedHashMap
Коллекции - обертки (wrappers) Collections.synchronizedList() map,set, collection Collections.unmodifiableList() map,set, collection
Потокобезопасные коллекции Synchronized- обертки CopyOnWriteArrayList ConcurrentHashMap Специализированные коллекции для multithreading- задач LinkedBlockingQueue DelayQueue SynchronousQueue
Если не хватает java.util.* Apache commons collections ( Google collections (
Ссылки Java collections tutorial dex.html dex.html