Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия | |||
develop:java:in [2023/03/11 05:20] admin |
develop:java:in [2023/05/03 15:18] (текущий) admin |
||
---|---|---|---|
Строка 453: | Строка 453: | ||
</ | </ | ||
Есть еще объекты блокировки с условиями\\ | Есть еще объекты блокировки с условиями\\ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Коллекции данных ==== | ||
+ | === Разделение интерфейсов и реализаций === | ||
+ | Собсна такое разделение является стандартом и дает множество преимуществ\\ | ||
+ | < | ||
+ | < | ||
+ | Самая простая форма интерфейса может выглядеть так: | ||
+ | <code java> | ||
+ | interface Queue< | ||
+ | { | ||
+ | void add(E e lement); | ||
+ | Е remove(); | ||
+ | int size(); | ||
+ | } | ||
+ | </ | ||
+ | А реализация с-но может сильно варьироваться и определяется классом, | ||
+ | <code java> | ||
+ | class CircularArrayQueue< | ||
+ | { | ||
+ | CircularArrayQueue(int capacity) | ||
+ | public void add(E element) | ||
+ | public Е remove () | ||
+ | public int size () | ||
+ | private Е[] elements; | ||
+ | private int head; | ||
+ | private int tail; | ||
+ | } | ||
+ | // или | ||
+ | class LinkedListQueue< | ||
+ | { | ||
+ | LinkedListQueue () | ||
+ | void add (Е element) | ||
+ | public Е remove () | ||
+ | public int size() | ||
+ | private Link head; | ||
+ | private Link tail; | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | Основополагающий для классов коллекций | ||
+ | <code java> | ||
+ | public interface Collection< | ||
+ | { | ||
+ | boolean add(E element); | ||
+ | Iterator< | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code java> | ||
+ | public interface Iterator< | ||
+ | { | ||
+ | E next(); | ||
+ | boolean hasNext(); | ||
+ | void remove(); | ||
+ | } | ||
+ | </ | ||
+ | Нужно проверять наличие через " | ||
+ | Порядок в котором перебираются элементы, | ||
+ | Итераторы в java отличаются от сишных, | ||
+ | Тобишь для каких либо д-й с итератором, | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Коллекции в Java === | ||
+ | < | ||
+ | < | ||
+ | {{: | ||
+ | |||
+ | **Связные списки**\\ | ||
+ | Двунаправленные элементы, | ||
+ | {{: | ||
+ | |||
+ | **Списочные массивы**\\ | ||
+ | Интерфейс List описывает упорядоченную коллекцию, | ||
+ | К слову, отличие **Vector** и **ArrayList** в том что первый потокобезопасный, | ||
+ | |||
+ | **Хеш-множества**\\ | ||
+ | Более эффективный поиск элементов в списке\\ | ||
+ | Из-за специфики реализации, | ||
+ | |||
+ | **Древовидные множества**\\ | ||
+ | Основным отличием является то что все элементы в нем всегда отсортированы, | ||
+ | Работает немного медленнее чем хеш, но многое зависит от типа данных, | ||
+ | |||
+ | **Одно- и двустроние очереди**\\ | ||
+ | Впринципе рассмотрено уже\\ | ||
+ | Так же существуют очереди **по приоритету**\\ | ||
</ | </ | ||