Коллекции Java - это наборы инструментов, предоставляемые Java, которые содержат обычно используемые структуры данных: коллекции, связанные списки, очереди, стеки, массивы, карты и т. Д.
Коллекции Java можно разделить на 4 части: список списков, набор сбора, карта карты, классы инструментов (итератор итератор, класс перечисления перечисления, массивы и коллекции).
Структура инструментария коллекции Java показана ниже.
Примечание. Посмотрев на каркасную диаграмму выше, сначала поймайте его багажник, а именно сборку и карту.
Коллекция - это интерфейс, очень абстрактная коллекция, которая содержит основные операции и свойства коллекции.
Коллекция включает в себя два филиала: список и набор.
(01) Список - это упорядоченная очередь, и каждый элемент имеет свой индекс. Значение индекса первого элемента составляет 0.
Классы реализации списка включают LinkedList, ArrayList, Vector, Stack.
(02) SET - это коллекция, которая не разрешает дубликаты элементов.
Установки классов реализации включают Hastset и Treesset. Hashset полагается на HashMap, который фактически реализуется через HashMap; Treesset полагается на TreeMap, который фактически реализуется через TreeMap.
Карта-это интерфейс отображения, а именно пары клавиш клавиш. Каждый элемент в карте содержит «ключ» и «значение, соответствующее ключу».
AbstractMap - это абстрактный класс, который реализует большую часть API в интерфейсе карты. Hashmap, Treemap и SleedHashmap все унаследованы от AbstractMap.
Хотя хэштаблируемый наследство от словаря, он реализует интерфейс карты.
Далее давайте посмотрим на итератор. Это инструмент для прохождения коллекций, то есть мы обычно пересекаем коллекции через итератор. Мы говорим, что коллекция зависит от итератора, потому что классы реализации коллекции должны реализовать функцию итератора () и вернуть объект итератора.
ListIterator существует специально для прохождения списка.
Давайте снова посмотрим на перечисление, это абстрактный класс, введенный JDK 1.0. Как и итератор, он также пересекает коллекцию; Но перечисление имеет меньше функций, чем итератор. На приведенной выше блок -схеме перечисление может использоваться только в хэштере, векторе, стеке.
Наконец, посмотрите на массивы и коллекции. Это два класса инструмента, которые управляют массивами и коллекциями.
С приведенной выше общей структурой мы проанализируем каждый класс отдельно.
Архитектура коллекции
Ниже мы суммируем коллекцию. Давайте посмотрим на диаграммы отношений некоторых фреймворчатых классов в сборе:
Коллекция - это интерфейс, и его основные два филиала: список и установка.
Список и набор - интерфейсы, и они наследуют от коллекции. Список - это упорядоченная очередь, и в списке могут быть повторяющиеся элементы; В то время как набор - это коллекция в математических концепциях, и в наборе нет повторяющихся элементов!
Список и набор имеют свои собственные классы реализации.
Для легкой реализации класс AbstractCollection Abstract определяется в коллекции, которая реализует большинство функций в сборе; Таким образом, в классе реализации коллекции мы можем сохранить дубликацию кодирования, унаследовав AbstractCollection. AbstractList и AbstractSet как наследуют от AbstractCollection, специфический класс реализации списка наследует от AbstractList, так и класс реализации SET наследуют от AbstractSet.
Кроме того, в коллекции существует функция итератора (), которая используется для возврата интерфейса итератора. Обычно мы пересекаем коллекцию через итератор. ListIterator уникален для интерфейса списка. В интерфейсе списка объект ListIterator возвращается через ListIterator ().
Далее, давайте посмотрим на введение каждого интерфейса и абстрактного класса; Затем у нас будет подробное понимание класса реализации.
1. Введение в сборку
Определение сбора следующим образом:
Общедоступная коллекция интерфейса <e> расширяет итерабильные <e> {} Это интерфейс, высоко абстрактная коллекция, которая содержит основные операции коллекции: добавление, удаление, очистка, прохождение (чтение), будь то пустые, получение размера, будь то защищены определенным элементом и т. Д.
Все подклассы интерфейса сбора (прямой подкласс и непрямой подкласс) должны реализовать два конструктора: конструкторы без параметров и конструкторов с сбором параметров. Конструктор с параметрами может использоваться для преобразования типа коллекции.
// Collection APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean Removeall (Collection <?> Collection) Abstract Boolean retainall (collection <?> Collection) Abstract int size () Abstract <t> t [] toarray (t [] Array) Abstract объект [] toarray ()
2. Введение в список
Определение списка заключается в следующем:
Список публичных интерфейсов <e> Extends Collection <e> {} Список - это интерфейс, унаследованный от коллекции, то есть список - это тип коллекции. Список - это упорядоченная очередь, и каждый элемент в списке имеет индекс; Значение индекса первого элемента составляет 0, а значение индекса последующих элементов +1 по очереди. В отличие от набора, дублирующие элементы разрешены в списке. Официальное введение списка следующее:
Список - это коллекция, которая поддерживает заказ для своих элементов. Каждый элемент в списке имеет индекс. Таким образом, к каждому элементу можно получить доступ к его индексу, причем первый индекс составляет нулевой. Обычно списки позволяют дублировать элементы по сравнению с подходами, где элементы должны быть уникальными.
О API. Поскольку список наследует от интерфейса сбора, он, естественно, содержит все функциональные интерфейсы в коллекции; Поскольку список является упорядоченной очередью, он также имеет свой собственный интерфейс API. Основные из них включают «добавить, удалить, получить и изменить элементы в указанном месте», «Получить подборы в списке» и т. Д.
// Collection APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean removeAll(Collection<?> collection)abstract boolean retainAll(Collection<?> collection)abstract int size()abstract <T> T[] toArray(T[] array)abstract Object[] toArray()// Compared with Collection, List's new API: abstract void add(int location, E object)abstract boolean addAll(int location, Collection<? extends E> collection)abstract E get(int location)abstract int indexOf(Object object)abstract int LastIndexof (объект объекта) Abstract ListIterator <e> listiceTerator (int location) Abstract listiceTerator <e> listicerator () Аннотация E Удалить (int location) Abstract e Set (int location, E -объект) Аннотация списка <e> Sublist (int Start, int End)
3. Введение в набор
Набор определяется следующим образом:
Набор публичных интерфейсов <e> Extends Collection <e> {} SET - это интерфейс, унаследованный от коллекции, то есть SET также является типом коллекции. Набор - это коллекция без дублирующих элементов.
О API. API SET точно такой же, как и коллекция.
// Set's APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean Removeall (Collection <?> Collection) Abstract Boolean retainall (collection <?> Collection) Abstract int size () Abstract <t> t [] toarray (t [] Array) Abstract объект [] toarray ()
4. AbstractCollection
Определение абстрактного объединения заключается в следующем:
Общественный абстрактный класс AbstractCollection <e> реализует коллекцию <e> {} AbstractCollection - это абстрактный класс, который реализует функции в сборе, кроме итератора () и размера ().
Основная функция AbstractCollection: он реализует большинство функций в интерфейсе коллекции. Это облегчает другие классы для реализации сбора, таких как ArrayList, LinkedList и т. Д. Если эти классы хотят реализовать интерфейс сбора, большинство интерфейсов были реализованы путем наследства AbstractCollection.
5. AbstractList
Определение абстрактного списка заключается в следующем:
Public Abstract Class AbstractList <e> расширяет AbstractCollection <e> реализует список <e> {} AbstractList - это абстрактный класс, который наследует от AbstractCollection и реализует интерфейс списка. Он реализует функции в списке, кроме size () и get (int location).
Основная функция AbstractList: он реализует большинство функций в интерфейсе списка. Это облегчает другие классы, чтобы наследовать список.
Кроме того, по сравнению с AbstractCollection интерфейс итератор () реализован в классе AbstractList Abstract.
6. AbstractSet
Определение AbstractSet выглядит следующим образом: Public Abstract Class AbstractSet <e> расширяет AbstractCollection <e> реализует SET <e> {} AbstractSet - это абстрактный класс, который наследует от AbstractCollection и реализует интерфейс SET. Поскольку интерфейс SET и API в интерфейсе коллекции точно такие же, SET не имеет собственного отдельного API. Как AbstractCollection, он реализует функции в списке, кроме итератора () и размера ().
Основная функция AbstractSet: он реализует большинство функций в интерфейсе SET. Это облегчает другие классы для реализации установленных интерфейсов.
7. Итератор
Определение итератора заключается в следующем:
итератор публичного интерфейса <e> {} Итератор - это интерфейс, который является итератором коллекции. Коллекцию можно пройти через элементы в коллекции через итератор. Интерфейс API, предоставленный итератором, включает в себя: существует ли следующий элемент, получить следующий элемент и удалить текущий элемент.
Примечание. Когда итератор пересекает коллекцию, он основан на ошибочном механизме. То есть, когда определенный поток проходит набор через итератор, если содержимое набора изменяется другими потоками; Затем, когда потоки A обращаются к набору, будет выброшено исключение CondurentModificationException, что приведет к неудачному событию. Что касается подробного содержания Fail-Fast, мы объясним это специально после неудачного резюме.
// apiabstract boolean hasnext () Abstract e next () Abstract void remet ()
8. Listiceterator
Определение ListIterator заключается в следующем:
Public Interface Listicerator <e> расширяет итератор <e> {} ListIterator - это интерфейс, унаследованный от итератора, который является итератором очереди. Специально используется для удобного списка, он может обеспечить переход вперед/назад. По сравнению с итератором, он добавляет интерфейсы API, такие как добавление, существует ли предыдущий элемент и получение предыдущего элемента.
// API ListIterator's // Унаследован от абстрактного интерфейса итератора Boolean Hasnext () Abstract e Next () Abstract void remement () // Добавить интерфейс API Аннотация void Add (E -объект) Аннотация логическое значение Hasprevious () Abstract int inteDex () Abstract e Предыдущий () Abstract int int prowerindex () Abstract void set (E -объект)