You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: jcf.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@
8
8
+[В чем разница между классами `java.util.Collection` и `java.util.Collections`?](#В-чем-разница-между-классами-javautilcollection-и-javautilcollections)
9
9
+[Что такое «fail-fast поведение»?](#Что-такое-fail-fast-поведение)
10
10
+[Какая разница между fail-fast и fail-safe?](#Какая-разница-между-fail-fast-и-fail-safe)
11
-
+[Приведите примеры итераторов реализующих поведение fail-safe](#Приведите-примеры-итераторов-реализующих-поведение-fail-safe)
11
+
+[Приведите примеры итераторов, реализующих поведение fail-safe](#Приведите-примеры-итераторов-реализующих-поведение-fail-safe)
12
12
+[Чем различаются `Enumeration` и `Iterator`.](#Чем-различаются-enumeration-и-iterator)
13
13
+[Как между собой связаны `Iterable` и `Iterator`?](#Как-между-собой-связаны-iterable-и-iterator)
14
14
+[Как между собой связаны `Iterable`, `Iterator` и «for-each»?](#Как-между-собой-связаны-iterable-iterator-и-for-each)
@@ -117,7 +117,7 @@ _«Коллекция»_ - это структура данных, набор к
117
117
+`Hashtable` — хэш-таблица, методы которой синхронизированы. Не позволяет использовать `null` в качестве значения или ключа и не является упорядоченной.
118
118
+`HashMap` — хэш-таблица. Позволяет использовать `null` в качестве значения или ключа и не является упорядоченной.
+`TreeMap` — реализация основанная на красно-чёрных деревьях. Является упорядоченной и предоставляет возможность управлять порядком элементов в коллекции при помощи объекта `Comparator`, либо сохраняет элементы с использованием «natural ordering».
120
+
+`TreeMap` — реализация, основанная на красно-чёрных деревьях. Является упорядоченной и предоставляет возможность управлять порядком элементов в коллекции при помощи объекта `Comparator`, либо сохраняет элементы с использованием «natural ordering».
121
121
+`WeakHashMap` — реализация хэш-таблицы, которая организована с использованием _weak references_ для ключей (сборщик мусора автоматически удалит элемент из коллекции при следующей сборке мусора, если на ключ этого элемента нет жёстких ссылок).
122
122
123
123
[к оглавлению](#java-collections-framework)
@@ -166,7 +166,7 @@ __fail-fast поведение__ означает, что при возникн
166
166
167
167
[к оглавлению](#java-collections-framework)
168
168
169
-
## Приведите примеры итераторов реализующих поведение fail-safe
169
+
## Приведите примеры итераторов, реализующих поведение fail-safe
170
170
Итератор коллекции `CopyOnWriteArrayList` и итератор представления `keySet` коллекции `ConcurrentHashMap` являются примерами итераторов fail-safe.
171
171
172
172
[к оглавлению](#java-collections-framework)
@@ -256,8 +256,8 @@ FILO, First-In-Last-Out («первым пришел, последним уше
256
256
+ доступ к произвольному элементу по индексу за _константное_ время _O(1)_;
257
257
+ доступ к элементам по значению за _линейное_ время _O(N)_;
258
258
+ вставка в конец в среднем производится за _константное_ время _O(1)_;
259
-
+ удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (capacity) не изменяется);
260
-
+ вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы находящиеся «правее» смещаются на одну ячейку вправо;
259
+
+ удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (capacity) не изменяется);
260
+
+ вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
261
261
+ минимум накладных расходов при хранении.
262
262
263
263
`LinkedList`:
@@ -267,7 +267,7 @@ FILO, First-In-Last-Out («первым пришел, последним уше
267
267
+ вставка или удаление в/из произвольного место _константное__O(1)_;
268
268
+ требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.
269
269
270
-
В целом, `LinkedList` в абсолютных величинах проигрывает `ArrayList` и по потребляемой памяти и по скорости выполнения операций. `LinkedList` предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.
270
+
В целом, `LinkedList` в абсолютных величинах проигрывает `ArrayList` и по потребляемой памяти, и по скорости выполнения операций. `LinkedList` предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.
271
271
272
272
[к оглавлению](#java-collections-framework)
273
273
@@ -279,7 +279,7 @@ FILO, First-In-Last-Out («первым пришел, последним уше
279
279
[к оглавлению](#java-collections-framework)
280
280
281
281
## Какое худшее время работы метода `contains()` для элемента, который есть в `LinkedList`?
282
-
_O(N)_. Время поиска элемента линейно пропорционально количеству элементов с списке.
282
+
_O(N)_. Время поиска элемента линейно пропорционально количеству элементов в списке.
283
283
284
284
[к оглавлению](#java-collections-framework)
285
285
@@ -307,7 +307,7 @@ _O(N)_. Вставка элемента в конец списка осущес
307
307
308
308
## Как происходит удаление элементов из `ArrayList`? Как меняется в этом случае размер `ArrayList`?
309
309
310
-
При удалении произвольного элемента из списка, все элементы находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой `trimToSize()`.
310
+
При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой `trimToSize()`.
311
311
312
312
[к оглавлению](#java-collections-framework)
313
313
@@ -481,9 +481,9 @@ private static class Node<E> {
481
481
482
482
## Сравните интерфейсы `Queue` и `Deque`.
483
483
## Кто кого расширяет: `Queue` расширяет `Deque`, или `Deque` расширяет `Queue`?
484
-
`Queue` - это очередь, которая обычно (но необязательно) строится по принципу FIFO (First-In-First-Out) - соответственно извлечение элемента осуществляется с начала очереди, вставка элемента - в конец очереди. Хотя этот принцип нарушает, к примеру `PriorityQueue`, использующая «natural ordering» или переданный `Comparator` при вставке нового элемента.
484
+
`Queue` - это очередь, которая обычно (но необязательно) строится по принципу FIFO (First-In-First-Out) - соответственно извлечение элемента осуществляется с начала очереди, вставка элемента - в конец очереди. Хотя этот принцип нарушает, к примеру,`PriorityQueue`, использующая «natural ordering» или переданный `Comparator` при вставке нового элемента.
485
485
486
-
`Deque` (Double Ended Queue) расширяет `Queue` и согласно документации это линейная коллекция, поддерживающая вставку/извлечение элементов с обоих концов. Помимо этого реализации интерфейса `Deque` могут строится по принципу FIFO, либо LIFO.
486
+
`Deque` (Double Ended Queue) расширяет `Queue` и согласно документации, это линейная коллекция, поддерживающая вставку/извлечение элементов с обоих концов. Помимо этого, реализации интерфейса `Deque` могут строится по принципу FIFO, либо LIFO.
487
487
488
488
Реализации и `Deque`, и `Queue` обычно не переопределяют методы `equals()` и `hashCode()`, вместо этого используются унаследованные методы класса Object, основанные на сравнении ссылок.
489
489
@@ -512,7 +512,7 @@ private static class Node<E> {
512
512
[к оглавлению](#java-collections-framework)
513
513
514
514
## `Stack` считается «устаревшим». Чем его рекомендуют заменять? Почему?
515
-
`Stack` был добавлен в Java 1.0 как реализация стека LIFO (last-in-first-out) и является расширением коллекции `Vector`, хотя это несколько нарушает понятие стека (например, класс `Vector` предоставляет возможность обращаться к любому элементу по индексу). Является частично синхронизированной коллекцией (кроме метода добавления `push()`) с вытекающими отсюда последствиями в виде негативного воздействия на производительность. После добавления в Java 1.6 интерфейса `Deque`, рекомендуется использовать реализации именно этого интерфейса, например `ArrayDeque`.
515
+
`Stack` был добавлен в Java 1.0 как реализация стека LIFO (last-in-first-out) и является расширением коллекции `Vector`, хотя это несколько нарушает понятие стека (например, класс `Vector` предоставляет возможность обращаться к любому элементу по индексу). Является частично синхронизированной коллекцией (кроме метода добавления `push()`) с вытекающими отсюда последствиями в виде негативного воздействия на производительность. После добавления в Java 1.6 интерфейса `Deque`, рекомендуется использовать реализации именно этого интерфейса, например,`ArrayDeque`.
0 commit comments