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

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


develop:java:in

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
develop:java:in [2023/02/27 14:14]
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>
- 
  
 <details> <details>
-<summary> </summary> +<summary>:!: Интерфейс **Collection** </summary> 
 +Основополагающий для классов коллекций
 <code java> <code java>
 +public interface Collection<E>
 +{
 +  boolean add(E element);
 +  Iterator<E> iterator();
 +}
 </code> </code>
 </details> </details>
Строка 475: Строка 509:
  
  
 +<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>
- +
  
  
develop/java/in.1677507269.txt.gz · Последнее изменение: 2023/02/27 14:14 — admin