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

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


develop:java:in_next

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
develop:java:in_next [2023/03/11 15:58]
admin
— (текущий)
Строка 1: Строка 1:
-====== Begin_next ====== 
- 
- 
-==== Коллекции данных ==== 
-=== Разделение интерфейсов и реализаций === 
-Собсна такое разделение является стандартом и дает множество преимуществ\\ 
-<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> 
-<summary> </summary> 
- 
-<code java> 
-</code> 
-</details> 
- 
- 
- 
- 
  
develop/java/in_next.1678550305.txt.gz · Последнее изменение: 2023/03/11 15:58 — admin