Коллекция это стандартная идея программы и языка программирования. Приложение часто работает с коллекцией, как например коллекцией информации работников, коллекцией фото, ...Java так же как и другие языки программирования поддерживает массив (array) как самую стандартную коллекцию. Но работа с массивом в разных ситуациях не является удобной, так как время существования массива, увеличение элементов или удаление элементов очень сложно, даже нужно высоко заплатить для эффективности программы если это преднамеренно.
Изображение ниже иллюстрирует массив:
2- Первый пример
Сначала, мы выполним пример с LinkedList, это список, количество элементов которого могут быть изменены, не имеют лимит как массив.
HelloLinkedList.java
Результаты запуска примера:
java - джава - учиться java - учебник java -
связанный список демо
- примеры java - java-программы
Пример с HashMap. Это объект содержащий пары ключей и значений (Key-Value). Например телефонная книга, где номер телефона это ключ, а информация абонента это значение. Ключи не должны совпадать.
HelloHashMap.java
Результаты запуска примера:
3- Лимиты при использовании массива - Предложение решения проблемы.
Элементы расставлены и ссылаются поочередно в памяти.
Это затрудняет удаления элемента из массива.
3.2- Удаление элемента из массива.
Элементы массива расставлены поочередно в памяти, это сложность, когда вы намеренно удаляете определенный элемент в массиве, он теряет свою очередность. Обычно, используется техника создания нового массива для хранения объектов старого массива и убрать ненужные элементы, но это снижает эффективность программы. В случае расширения массива используется индентичная техника, это создать новый массив с большим размером, потом скопировать элементы старого массива в новый массив.
Очевидно, что массив это не хороший способ для разных случаев применения.
3.3- Связанный список
Связанный список ( Linked List) это один из способов управления списка данных, который поборол недостаток массива. Конечно для управления списком в Java есть многие другие способы, например ArrayList.
Смотрите недостатки LinkedList:
Элементы в этом списке могут быть прерывисто изолированы (непостоянны) в памяти.
Это двустороняя связь между элементами.
Каждый элемент в списке имеет ссылку к элементу напротив и к элементу сзади.
LinkedList is a two-way link.
Элемент Link это объект, содержащий данные которыми вам нужно управлять (data), и имеет 2 ссылки к элементам Link спереди и элементам Link сзади.
Remove an element from LinkedList
Удалить элемент из LinkedList это тоже самое что убрать человека стоящего в очереди. Два человека стоящие рядом с этим человеком должны обновить информацию людей стоящих спереди и сзади них.
Добавить элемент в LinkedList (Добавить в конец или середину списка)
Несмотря на то что мы имеем только один пример связанного списка, он помогает нам понять больше про пакет java.util.
4- Обзор Java Collections Framework
Зная ограничения сразу при версии 1.0 java добавил class java.util.Vector это class хранящий список объектов. И java.util.Hashtable это class хранящий пары key/value (ключ/значение) . После этого, Java2 platform продолжил ознакомление со способами доступа к коллекция, называется Collections Framework. java.util.Vector, java.util.Hashtable так же существует и сейчас является частью той большой платформы. Эти коллекции построены на основании некоторых интерфейсов в пакете java.util. И разделены на 2 иерархические системы, которые лидируются с помощью 2 интерфейсов java.util.Collection содержащие список объектов и java.util.Map содержащие пары key/value.
4.1- Интерфейсы в Java Collections Framework
Изображение выше это важные интерфейсы Java Collections Framework. Мы поговорим о целях использования этих интерфейсов и их группировании по целям и способам использования. В пакете ava.util class-ы применяют один или более интерфейсов. Поэтому определенный class в java.util может иметь разные функции. Например java.util.HashMap:
** Hashtable **
** Vector **
4.2- Две иерархии лидируемые 2 интерфейсами Collection и Map - Методы хранения данных
Группа Collection хранит объекты.
Есть 3 подветки в группе Collection: Queue, List, Set .
Элементы могут быть похожими или независят от 3-х перечисленных веток. (Более детально будет обсуждено позже) .
Группа Map хранит пары key/value
Пары key/value содержащиеся в Map (карта) это всегда разные key между парами
Если мы знаем key, можем получить значение value в Map соответстующий с этим key.
Группа Collection хранит данные в виде ссылки, группа Map хранит пары key/value.
4.3- Интерфейсы итератора и интерфейс RandomAccess - Метод получения доступа к данным
java.util.Iterator
Похож на итератор для получения данных, способ запроса по очереди с одного элемента к другому.
java.util.RandomAccess
Случайный метод запроса, например для позиции элемента и получения этого элемента в наборе
Например java.util.Vector применяет этот интерфейс, может получить случайный элемент vector.get(int index).
Группа Collection тоже может иметь доступ поочередно вызывая метод iterator() для получения объекта Iterator .
java.util.Collection расширен из интерфейса java.lang.Iterable (может повториться) поэтому унаследовал метод public Iterator iterator().
На иллюстрации выше имеется 2 Interface Iterator & RandomAccess, он представляет 2 способа доступа в элементы коллекции.See Vector class:
** Vector **
Vector принадлежит группе Collection, вы можете получить доступ к ее элементам через Iterator и можно получить случайный доступ через метод get(index).
Заметка: Для объектов в группе List вы так же можете получить объект ListIterator, этот итератор позволяет вам переместить назад или вперед позицию курсора на списке, вместо того чтобы перемещать только вперед как в Iterator
5- Collection Group
5.1- Interfaces в группе Collection
3 прямых подинтерфейса в Collection это Queue, List, Set при этом Queue добавлен из версии 1.5 и считается ожидающимся в очереди. Queue так же имеет подинтерфейс это BlockingQueue, этот интерфейс принадлежит пакету java.util.concurrent, мы не будет обсуждать это в данной статье. Queue это интерфейс с разными понятиями и способов организации элементов, которым нужно больше всего внимания. Три интерфейса Queue , List , Set можно считать 3-мя ветками в группе Collection , перед тем как перейти к деталям каждой группы посмотрим обзор интерфейса Collection.
java - джава - учиться java - учебник java -
Java интерфейс
- примеры java - java-программы
5.2- java.util.Collection Interface
Наследственная связь:
** java.util.Collection **
5.3- Получить доступ к элементам коллекции
Iterator это способ утверждения над элементами коллекции.
Например использовать Iterator для получения доступа к элементам Collection.
CollectionAndIterator.java
Результаты запуска примера:
java - джава - учиться java - учебник java -
очередь итератор java
- примеры java - java-программы
5.4- Подветка Collection
Как упомянуто выше, Collection имеет 3 подинтерфейса это Queue , List и Set. И разница между ними это способ хранения данных
java - джава - учиться java - учебник java -
очередь коллекции Java
- примеры java - java-программы
List
Список ( List) это упорядоченный список объектов, там где одинаковые объекты могут появиться один или много раз. Например: [1, 7, 1, 3, 1, 1, 1, 5]. И вы можете сказать про "номер N" в списке. Вы можете добавить элемент в любую позицию в списке, изменить элемент в любой позиции в списке, или удалить элемент из любой позиции в списке,
Queue
Queue
Очередь ( Queue) это тоже упорядоченный набор, но вы можете только прикоснуться к элементам в начале очереди. Все элементы вставленные в конце очереди и удалить первые элементы в очереди. Вы можете узнать сколько элементов в очереди, но вы не можете найти или сказать про элемент N, вы можете увидеть только когда он станет первым в очереди.
Set
Set это неупорядоченный набор, и не позволяет содержать дубликаты. Вы не може сказать про N-ый элемент и даже про первый элемент, так как он не имеет порядок. Вы можете добавить или удалить элементы, и можете найти если элемент существует (Например "Находится ли 7 в данном наборе?"). Примечание: SortedSet это подинтерфейс Set который может содержать элементы, имеющие порядок.
5.5- java.util.List Interface
List это подинтерфейс в Collection который имеет полные функции Collection так же имеет некоторый особенный функции:
Позволяет дублирование элементов
Позволяет сущетвовать 0 или более элементов null.
Это набор с последовательностью
Помимо доступа, используя Iterator можно получить доступ используя ListIterator. ListIterator позволяет перемещать позицию курсора вперед или назад.
// Возвращает объект ListIterator, чтобы просмотреть элементы списка.
public ListIterator<E> listIterator()
// Возвращает объект ListIterator,
// для просмотра элементов с позиции с 'index' до конца списка.
public ListIterator<E> listIterator(int index)
ListAndListIterator.java
java - джава - учиться java - учебник java -
Итератор списка
- примеры java - java-программы
Результаты запуска примера:
java - джава - учиться java - учебник java -
Итератор списка java
- примеры java - java-программы
5.6- java.util.Set Interface
Set это подинтерфейс в Collection, который имеет полные функции Collection, и имеет некоторые другие функции:
Описывает набор который не позволяет содержать дублированные элементы
Позволяет существование элемента null, если есть элемент null то только 1.
HashSetExample.java
Результаты запуска примера:
5.7- java.util.Queue Interface
Queue (очередь) это подинтерфейс в Collection, который имеет полные функции Collection, довольно похож на List, при этом цель использования отличается. Queue разработан чтобы вы могли получить доступ к первому элементу в очереди, и при удалении элементов, он удаляет певый элемент в очереди. Похож на очередь в супермаркете, только первый человек в очереди обслуживается, новый человек будет помещен в очередь, позиция помещения может быть не в конце. Позиция помещенного элемента зависит от вида очереди и приоритет элемента.
Это коллекция позволяющия элементам дублироваться.
Не позволяет существовать элементам null.
Есть два класса применяющих интерфейс Queue.
java.util.LinkedList
java.util.PriorityQueue
LinkedList это стандартная очередь. Но помните, что LinkedList применяет оба интерфейса List и Queue.
PriorityQueue хранит элементы внутри по естественному порядку элементов (если эти элементы вида Comparable), или в соответствии с Comparator настроенный для PriorityQueue.
Заметьте, что один class может применить оба интерфейса List и Queue, поэтому вам не нужно обращать внимания на то, как элементы расставлены внутри объекта класса выше, если вы считаете его очередью, смотрите как получить доступ к элементам в очереди. Смотрите типичные методы Queue, он симулирует очередь как линию очереди людей в супермаркете.
boolean add(E)
java - джава - учиться java - учебник java -
Добавить логическое значение
- примеры java - java-программы
Вставляет определенный элемент в очередь если это возможно сделать сразу без лимита из-за размера очереди, возвращает true если успешно, напротив выбрасывает исключения IllegalStateException если в очереди больше нет места
boolean offer(E)
java - джава - учиться java - учебник java -
Логическое предложение
- примеры java - java-программы
E remove()
Получает и удаляет первый элемент из очереди. Этот метод отличается от poll() только в том, что выбрасывает исключение, если в очереди нет элементов.
E poll()
java - джава - учиться java - учебник java -
e голосование
- примеры java - java-программы
Получаете и удаляет первый элемент в очереди, или возвращает null если в очереди нет элементов.
E element()
Получает, но не удаляет первый элемент в очереди. Этот метод отличается от peek(), в том что выбрасывает исключение если в очереди нет элементов.
E peek()
java - джава - учиться java - учебник java -
e метод peek
- примеры java - java-программы
Получает, но не удаляет первый элемент в очереди, или возвращает null если в очереди нет элементов.
Comment:
Среди методов очереди нет такого метода, который позволил бы вам получить доступ к другим элементам в очереди, за исключением первого элемента, вы так же не може указывать местонахождение элемента, который будет вставлен.
QueueDemo.java
Например, с очередью приоритетов PriorityQueue. Эта очередь хранит элементы внутри в соответствии с естественным порядком (если эти элементы сравниваются друг с другом - применяя Comparable) или в соответствии с Comparator настроенный для PriorityQueue.
String это класс применяющий интерфейс Comparable, они могут сравниваться друг с другом, и расставлены по порядку алфавита.
PriorityQueueDemo.java
Результаты запуска примера:
5.8- Наследственные отношения между классами в группе Collection
java - джава - учиться java - учебник java -
Реферативный-сборник
- примеры java - java-программы
5.9- java.util.ArrayList
ArrayList имеет полные функции интерфейса List. Одновременно, имеет возможность получать доступ к случайным элементам (Из-за наследства от интерфейса RandomAccess)
Это в принципе похоже на класс Vector, отличается в том, что метод Vector синхронизирован, а ArrayList нет. ArrayList подходит для одноточного приложения (1 Thread).
ArrayListDemo.java
Результаты запуска примера:
java - джава - учиться java - учебник java -
массив список демо java
- примеры java - java-программы
5.10- java.util.Vector
Vector это класс имеющий функции похожие на ArrayList. Отличие в том, что методы Vector синхронизированы, а в ArrayList нет.
Vector имеет некоторые методы, которые были унаследованы от версии 1.0. Перед тем как понятие Collection Framework было упомянуто в Java.
VectorDemo.java
5.11- java.util.SortedSet
SortedSet это подинтерфейс интерфейса Set, который имеет полные функции Set. SortedSet это категория наборов с расстановкой, добавленные новые элементы в категорию набора автоматически стоят на подходящем месте, чтобы удостовериться, что набор расставлен (по возрастанию или убыванию)
Поэтому элементы набора должны сравниваться друг с другом, они должны быть объектами java.lang.Comparable (Могут быть сравнены), Если вы добавляете элемент который не является объектом Comparable, вы получите исключение.
Один из классов, применяющих интерфейс SortedSet это TreeSet.
Будем считать класс Player (Игрок), включает информацию: имя, фамилия, количество золотых медалей, количество серебряных медалей, количество бронзовых медалей.
Игроки ( Player) можно сравнивать друг с другом по правилу:
У кого больше золотых медалей будет иметь позицию выше.
Если у двух человек количество золотых медалей равно, то у кого будет больше серебряных медалей, имеет позицию выше.
Если у двух человек количество золотых серебряных медалей равно, то у кого будет больше бронзовых медалей, имеет позицию выше.
Остальные будут считаться равными.
Player.java
SortedSetDemo.java
Результаты запуска класса SortedSetDemo:
java - джава - учиться java - учебник java -
Сортировка набора демо
- примеры java - java-программы
6- Map group
6.1- Interfaces в группе Map
Группа Map лидируется интерфейсом java.util. Map. Этот интерфейс имеет 2 подинтерфейса java.util.SortedMap и java.util.concurrent. ConcurrentMap . ConcurrentMap не принадлежит пакету java.util он был представлен с версии java1.5, мы не будем ссылаться об этом в данной статье. Группа Map характеризуется хранением данных через пары key/value.
6.2- Классы в группе Map
6.3- java.util.Map Interface
Необязательные методы (Optional operation) может поддерживаться на применяемом классе или нет, в случае если не поддерживается, то может выбросить исключение UnsupportedOperationException:
Но класс MyMap не поддерживает действительный смысл метода clear(). Если пользователь намеренно использует этот метод MyMap то получит исключение.
MapDemo.java
Результаты запуска:
java - джава - учиться java - учебник java -
Карта демо java
- примеры java - java-программы
Вы можете получить доаступ данных Map через Map.Entry, смотрите иллюстрацию ниже:
MapEntryDemo.java
Результаты запуска примера:
java - джава - учиться java - учебник java -
Карта ввода демо
- примеры java - java-программы
6.4- java.util.SortedMap Interface
Interface SortedMap это подинтерфейс Map. Он гарантирует, что пары key/value расставлены по порядку возрастания в соответствии с key.
Есть только один класс в пакете java.util который применяет интерфей SortedMap, это TreeMap.
Related Searches to Руководство Java Collections Framework
явная структура коллекции javaколлекции в java с примерамиколлекции в вопросах интервью с javaинтерфейс коллекции в javaколлекции в javaколлекции в javatpointиерархия коллекции в javaразница между коллекцией и коллекциямиколлекции в java с примерами для новичковпрограммы сбора в java для интервьюпрограммы на основе коллекций в javaупражнения программирования Java-коллекции