JAVA COLLECTION FRAMEWORK Java collections framework — это хранилища, поддерживающие различные способы накопления и упорядочения объектов с целью обеспечения возможностей эффективного доступа к ним. Все коллекции поддерживают базовый набор операций: добавление, удаление, модификация элементов коллекции. Все классы коллекций реализуют также интерфейсы Serializable, Cloneable (кроме WeakHashMap). Кроме того, классы, реализующие интерфейсы List<E> и Set<E>, реализуют также интерфейс Iterable<E>. Коллекции - это набор объектов (место для хранения объектов). иерархия: самый главный интерфейс collection у которого есть три колена(интерфейса) Set, Queue, List List хранит элементы в порядке их добавления Queue хранят элементы в порядке необходимом для их обработки. Dequeu - это двунаправленная очередь, она расширяет интерфейс Queue Set это множества уникальных объектов. Двух одинаковых объектов быть не может. LinkedList имплементирует интерфейс List и Queue МЕТОДЫ: Метод boolean add (E obj) boolean addAll (Collection<? extends E> c) void clear () boolean contains(Object obj) boolean equals(Object obj) int hashCode () boolean isEmpty () Iterator<E> iterator() boolean remove(Object obj) boolean removeAll(Collection<?> c) boolean retainAlI(Collection<? > c) int size () Object [] toArray () Описание Добавляет obj к вызывающей коллекции. Возвращает true, если obj был добавлен к коллекции. Добавляет все элементы к вызывающей коллекции. Возвращает true, если операция удалась (то есть все элементы добавлены). В противном случае возвращает false. Удаляет все элементы вызывающей коллекции. Возвращает true, если obj является элементом вызывающей коллекции. В противном случае возвращает false Возвращает true, если вызывающая коллекция и obj эквивалентны. Возвращает хешкод вызывающей коллекции. Возвращает true, если вызывающая коллекция пуста. В противном случае возвращает false. Возвращает итератор для вызывающей коллекции. Удаляет один экземпляр obj из вызывающей коллекции. Возвращает true, если элемент удален. В противном случае возвращает false. Удаляет все элементы из вызывающей коллекции. Возвращает true, если в результате коллекция изменяется (то есть элементы удалены). Удаляет все элементы кроме входящих из вызывающей коллекции. Возвращает true, если в результате коллекция изменяется (то есть элементы удалены). В противном случае возвращает false. Возвращает количество элементов, содержащихся в коллекции. Позволяет преобразовать последовательность данных в массив объектов того же типа List Служит для описания списков Set Коллекция без повторяющихся элементов Queue и Dequeue Очередь - хранилище элементов для обработки Может содержать повторяющиеся элементы HashSet самый быстрый (порядок не важен, важна скорость) Сохраняет последовательность добавления элементов и позволяет осуществлять доступ к элементу по индексу TreeSet гарантирует и сортирует порядок элементов (сортировка нужна, скорость зависит от размеров). При сортировке объектов надо указать как их сортировать LinkedHashSet расширяет класс HashSet. Список элементов в порядке добавления. Важен порядок, скорость не важна. Интерфейс SortedSet из пакета java.util, расширяющий интерфейс Set, описывает упорядоченное множество, отсортированное по естественному порядку возрастания его элементов или по порядку, заданному реализацией интерфейса Comparator. Порядок выдачи элементов определяется конкретной реализацией, обычно FIFO (first-in-first-out), то есть от начала в конец. Не может хранить null, можно указать размер. Dequeu - это двустороняя очередь, она расширяет интерфейс Queue. Может работать как Queue и как Stack(по принципу LIFO последний пришел первый вышел) ArrayList<E> - список на базе массива, LinkedList<E> двусвязный список Map<K, V> (key-value) Map хранит объекты в виде ключ значения, он не входит в интерфейс Collection. Это отдельный интерфейс Управляет парами ключ-значение. Не может содержать повторяющихся ключей. Каждому ключу соответствует одно значение или null Iterator не входит в Collection, но имплеминтирует его. Он предназначен для обхода коллекции. За счет методов Iterator можем пробежаться по всем элементам и провести над ними действия (без знания коллекций) МЕТОДЫ ИТЕРАТОРОВ • hasNext() - определение наличия следующего элемента • next() - взятие следующего элемента • remove() - удаление элемента Динамический массив - это массив, расширяющийся при добавлении нового объекта. Класс ArrayList - это класс, реализующий функционал динамического массива. МЕТОДЫ ARRAYLIST • void add(E obj) - добавляет в конец списока объект obj • void add(int index, E obj) - добавляет в список объект obj по индексу index • boolean addAll(int index, Collection‹? extends E> col) - добавляет в список по индексу index все элементы коллекции со. Если в результате добавления список был изменен, то возвращается true, иначе возвращается false • E get(int index) - возвращает объект из списка по индексу index • int indexOf(Object obj) - возвращает индекс первого вхождения объекта obj в список. Если объект не найден, то возвращается -1 • int lastIndexOf(Object obj) - возвращает индекс последнего вхождения объекта obj в список. Если объект не найден, то возвращается -4 • Listiterator<E> listlterator () - возвращает объект Listiterator для обхода элементов списка • static ‹E> List<E> of(элементы) - создает из набора элементов объект List • E remove(int index) - удаляет объект из списка по индексу index, возвращая при этом удаленный объект • E set(int index, E obj) - присваивает значение объекта obj элементу, который находится по индексу index • void sort(Comparator‹? super E> comp) - сортирует список с помощью компаратора сотр • List<E> subList(int start, int end) - получает набор элементов, которые находятся в списке между индексами start и end МЕТОДЫ LINKEDLIST - ВАЖНО МНОГО УДАЛЯТЬ/ДОБАВЛЯТЬ, НО НЕ ЧИТАТЬ/ПИСАТЬ ПО СЕРЕДИНЕ • Object getFirst() - возвращает первый элемент списка • Object getLast() - возвращает последний элемент списка • Listiterator listlterator(int index) - возвращает итератор списка, указывающий на элемент с данным номером • Object removeFirst() - удаляет первый элемент списка • Object removeLast() - удаляет последний элемент списка РЕАЛИЗАЦИИ ИНТЕРФЕЙС SET<E> HashSet<E> - неупорядоченное множество на основе хэш кода TreeSet<E> - упорядоченное множество, элементы которого отсортированы в порядке возрастания LinkedHashSet<E> - упорядоченный HashSet, элементы храняться в порядке добавления HASHSET • константное время для add(), remove(), contains() и size() • порядок элементов в контейнере может меняться • производительность итерации по контейнеру зависит от емкости и «коэффициента загрузки» (рекомендуется оставлять load factor значением по умолчанию равным 0.75, что является хорошим компромиссом между временем доступа и объемом хранимых данных) TREESET • Время для базовых операций add(), remove(), contains() — log(n) • гарантирует порядок элементов • не предоставляет каких-либо параметров для настройки производительности • предоставляет дополнительные методы для упорядоченного списка: first(), last(), headSet(), tailSet) и т.д. QUEUE<E> Методы, бросающие исключения: • add(Object o) - добавить элемент • Object element() - вершина очереди • Object remove() - удалить элемент из вершины Методы, не бросающие исключений: • offer(Object o) - добавить элемент • Object peek() - вершина очереди • Object poll() - удалить элемент из вершины Map хранит объекты в виде ключ значения, он не входит в интерфейс Collection • HashMap Хранит ключи в хеш-таблице Имеет наиболее высокую производительность Не гарантирует порядок элементов Может содержать null-ключ и null-значения • TreeMap Хранит ключи в отсортированном порядке Работает существенно медленнее чем HashMap Не может содержать null-ключи, но может содержать null-значения • LinkedHashMap Хранит ключи в порядке их вставки в Мар Немного медленнее HashMap Может содержать null-ключ и null-значения МЕТОДЫ ИНТЕРФЕЙСА МАР<К, V> • void clear() - очищает коллекцию • boolean containsKey(Object k) - возвращает true, если коллекция содержит ключ к • boolean containsValue(Object v) - возвращает true, если коллекция содержит значение v • Set<Map.Entry<K, V»> entrySet() - возвращает набор элементов коллекции. Все элементы представляют объект Мар.Entry • boolean equals(Object obj) - возвращает true, если коллекция идентична obj • boolean isEmpty - возвращает true, если коллекция пуста • V get(Object k) - возвращает значение объекта, ключ которого равен к или возвращает null • V put(K k, V v) - помещает в коллекцию новый объект с ключом к и значением v. Если в коллекции уже есть объект с подобным ключом, то он перезаписывается. После добавления возвращает предыдущее значение для ключа k, если он уже был в коллекции. Если же ключа еще не было в коллекции, то возвращается значение null • V putlfAbsent(K k, V v) - помещает в коллекцию новый объект с ключом к и значением v, если в коллекции еще нет элемента с подобным ключом. • Set<K> keySet() - возвращает набор всех ключей • Collection<V> values() - возвращает набор всех значений отображения • void putAll(Map<? extends K, ? extends V> map) - добавляет в коллекцию все объекты из тар • V remove(Object k) - удаляет объект с ключом к • int size() - возвращает количество элементов коллекции МЕТОДЫ ИНТЕРФЕЙСА МАР.ENTRY<K, V> • boolean equals(Object obj): возвращает true, если объект obj, представляющий интерфейс Map. Entry, идентичен текущему • K getKey() - возвращает ключ объекта • V getValue() - возвращает значение объекта • V setValue(V v) - устанавливает для текущего объекта значение v • int hashCode() - возвращает хеш-код данного объекта КОМПАРАТОРЫ - СОРТИРОВКА КОЛЛЕКЦИЙ Есть два интерфейса для сортировки коллекций: Comparator и Comparable например: List<String> words = new ArrayList<>(); words.add("w").add("a").add("b"); Set<String> wordsTree = new TreeSet<>(words); Вывод: ArrayList:[w, a, b] TreeSet:[a, b, w] (трисет по умолчанию сортирует) Пример сортировки объектов: то есть объекты сортируются по одному из полей Для Comparator мы создаем отдельный класс, имплементируем интерфейс и переопределяем метод compare Вне зависимости от того, реализован ли в классе Person интерфейс Comparable, логика сравнения и сортировки будет использоваться та, которая определена в классе компаратора. Также можно после создания объекта Comparator, записывать его в метод sort(). Перед sort() указываем лист или сет, который хотим отсортировать О-синтаксис - система приблизительных обозначений. О-порядок СЕРИАЛИЗАЦИЯ И BUFFER** Данное поле меняется после изменений в классе полей и тд Его нужно обновлять, тк при изменении, это уже будут два разных класса, и ошибка не высветится Буферы – это область памяти, используемая для временного хранения данных при вводе или выводе.