Инструменты пользователя

Инструменты сайта


develop:java:in

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

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