Проект

Общее

Профиль

JAVA COLLECTIONS FRAMEWORK » История » Версия 1

Александр Александров, 20.04.2019 03:34

1 1 Александр Александров
h1. JAVA COLLECTIONS FRAMEWORK
2
3
h2. Вопросы
4
5
# Что такое Коллекция?
6
# Назовите основные интерфейсы коллекций и их имплементации.
7
# Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
8
# Чем отличается HashMap от Hashtable?
9
# Чем отличается ArrayList от Vector?
10
# Как сравниваются елементы коллекций?
11
# Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection,Iterable, Iterator, NavigableSet, NavigableMap.
12
# Почему Map - это не Collection, в то время как List и Set являются Collection?
13
# Дайте определение понятию "iterator".
14
# Что вы знаете об интерфейсе Iterable?
15
# Как одной строчкой преобразовать HashSet в ArrayList?
16
# Как одной строчкой преобразовать ArrayList в HashSet?
17
# Как перебрать все ключи Map учитывая, что Map - это не Iterable?
18
# Как перебрать все значения Map учитывая, что Map - это не Iterable?
19
# Как перебрать все пары ключ-значение в Map учитывая, что Map - это не Iterable?
20
# В чем проявляется "сортированность" SortedMap, кроме того, что toString() выводит все по порядку?
21
# Как одним вызовом копировать элементы из любой Collection в массив?
22
# Реализуйте симметрическую разность двух коллекций используя методы Collection(addAll(), removeAll(), retainAll()).
23
# Сравните Enumeration и Iterator.
24
# Как между собой связаны Iterable и Iterator?
25
# Как между собой связаны Iterable, Iterator и "for-each " введенный в Java 5?
26
# Сравните Iterator и ListIterator.
27
# Что произойдет, если я вызову Iterator.next() не "спросив" Iterator.hasNext()?
28
# Что произойдет, если я вызову Iterator.next() перед этим 10 раз вызвав Iterator.hasNext()? Я пропущу 9 элементов?
29
# Если у меня есть коллекция и порожденный итератор, изменится ли коллекция, если я вызову iterator.remove()?
30
# Если у меня есть коллекция и порожденный итератор, изменится ли итератор, если я вызову collection.remove(..)?
31
# Зачем добавили ArrayList, если уже был Vector?
32
# В реализации класса ArrayList есть следующие поля: Object[] elementData, int size.
33
# Объясните, зачем хранить отдельно size, если всегда можно взять elementData.length?
34
# LinkedList - это односвязный, двусвязный или четырехсвязный список?
35
# Какое худшее время работы метода contain() для элемента, который есть в LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
36
# Какое худшее время работы метода contain() для элемента, который есть в ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
37
# Какое худшее время работы метода add() для LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
38
# Какое худшее время работы метода add() для ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
39
# Сколько выделяется элементов в памяти при вызове ArrayList.add()?
40
# Сколько выделяется элементов в памяти при вызове LinkedList.add()?
41
# Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
42
# Оцените количество памяти на хранение одного примитива типа byte в ArrayList?
43
# Я добавляю элемент в середину List-а: list.add(list.size()/2, newElem). Для кого эта операция медленнее - для ArrayList или для LinkedList?
44
# Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)?
45
# Как одним вызовом из List получить List со всеми элементами, кроме первых и последних 3-х?
46
# Могут ли у разных объектов в памяти (ref0 != ref1) быть ref0.hashCode() == ref1.hashCode()?
47
# Могут ли у разных объектов в памяти (ref0 != ref1) быть ref0.equals(ref1) == true?
48
# Могут ли у разных ссылок на один объект в памяти (ref0 == ref1) быть ref0.equals(ref1) == false?
49
# Есть класс Point{int x, y;}. Почему хэш-код в виде 31 * x + y предпочтительнее чем x + y?
50
# Если у класса Point{int x, y;} "правильно " реализовать метод equals (return ref0.x == ref1.x && ref0.y == ref1.y), но сделать хэш-код в виде int hashCode() {return x;}, то будут ли корректно такие точки помещаться и извлекаться из HashSet?
51
# equals() порождает отношение эквивалентности. Какими из свойств обладает такое отношение: коммутативность, симметричность, рефлексивность, дистрибутивность, ассоциативность, транзитивность?
52
# Можно ли так реализовать equals(Object that) {return this.hashCode() == that.hashCode()}?
53
# В equals требуется проверять, что аргумент (equals(Object that)) такого же типа как и сам объект. В чем разница между this.getClass() == that.getClass() и that instanceof MyClass?
54
# Можно ли реализовать метод equals класса MyClass вот так: class MyClass {public boolean equals(MyClass that) {return this == that;}}?
55
# Будет ли работать HashMap, если все ключи будут возвращать int hashCode() {return 42;}?
56
# Зачем добавили HashMap, если уже был Hashtable?
57
# Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресацией и на основе метода цепочек. Как реализована HashMap? Почему так сделали (по вашему мнению)? В чем минусы и плюсы каждого подхода?
58
# Сколько переходов по ссылкам происходит, когда вы делаете HashMap.get(key) по ключу, который есть в таблице?
59
# Сколько создается новых объектов, когда вы добавляете новый элемент в HashMap?
60
# Как работает HashMap при попытке сохранить в нее два элемента по ключам с
61
# одинаковым hashCode, но для которых equals == false?
62
# HashMap может выродиться в список даже для ключей с разным hashCode. Как это возможно?
63
# Какое худшее время работы метода get(key) для ключа, которого нет в таблице (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
64
# Какое худшее время работы метода get(key) для ключа, который есть в таблице (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
65
# Объясните смысл параметров в конструкторе HashMap(int initialCapacity, float loadFactor).
66
# В чем разница между HashMap и IdentityHashMap? Для чего нужна IdentityHashMap? Как может быть полезна для реализации сериализации или клонирования?
67
# В чем разница между HashMap и WeakHashMap? Для чего нужна WeakHashMap?
68
# В WeakHashMap используются WeakReferences. А почему бы не создать SoftHashMap на SoftReferences?
69
# В WeakHashMap используются WeakReferences. А почему бы не создать PhantomHashMap на PhantomReferences?
70
# Сделайте HashSet из HashMap (используйте только множество ключей, но не множество значений).
71
# Сделайте HashMap из HashSet (HashSet<Map.Entry<K, V>>)
72
# Сравните интерфейсы java.util.Queue и java.util.Deque.
73
# Кто кого расширяет: Queue расширяет Deque, или Deque расширяет Queue?
74
# Почему LinkedList реализует и List, и Deque?
75
# В чем разница между классами java.util.Arrays и java.lang.reflect.Array?
76
# В чем разница между классами java.util.Collection и java.util.Collections?
77
# Напишите НЕмногопоточную программу, которая заставляет коллекцию выбросить ConcurrentModificationException.
78
# Что такое "fail-fast поведение"?
79
# Для множеств еnum-ов есть специальный класс java.util.EnumSet? Зачем? Чем авторов не устраивал HashSet или TreeSet?
80
# java.util.Stack - считается "устаревшим". Чем его рекомендуют заменять? Почему?
81
# Какая коллекция реализует дисциплину обслуживания FIFO?
82
# Какая коллекция реализует дисциплину обслуживания FILO?
83
# Приведите пример, когда какая-либо коллекция выбрасывает UnsupportedOperationException.
84
# Почему нельзя написать "ArrayList<List> numbers = new ArrayList<ArrayList>();" но можно "List<ArrayList> numbers = new ArrayList<ArrayList>();"?
85
# LinkedHashMap - что это еще за "зверь"? Что в нем от LinkedList, а что от HashMap?
86
# LinkedHashSet - что это еще за "зверь"? Что в нем от LinkedList, а что от HashSet?
87
# Говорят, на LinkedHashMap легко сделать простенький кэш c "invalidation policy", знаете как?
88
# Что позволяет сделать PriorityQueue?
89
# В чем заключаются отличия java.util.Comparator от java.lang.Comparable?
90
91
h2. Ответы
92
93
h3. Что такое Коллекция?
94
95
96
h3. Назовите основные интерфейсы коллекций и их имплементации.
97
98
99
h3. Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
100
101
102
h3. Чем отличается HashMap от Hashtable?
103
104
105
h3. Чем отличается ArrayList от Vector?
106
107
108
h3. Как сравниваются елементы коллекций?
109
110
111
h3. Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection,Iterable, Iterator, NavigableSet, NavigableMap.
112
113
114
115
h3. Почему Map - это не Collection, в то время как List и Set являются Collection?
116
117
118
119
h3. Дайте определение понятию "iterator".
120
121
122
123
h3. Что вы знаете об интерфейсе Iterable?
124
125
126
127
h3. Как одной строчкой преобразовать HashSet в ArrayList?
128
129
130
131
h3. Как одной строчкой преобразовать ArrayList в HashSet?
132
133
134
135
h3. Как перебрать все ключи Map учитывая, что Map - это не Iterable?
136
137
138
139
h3. Как перебрать все значения Map учитывая, что Map - это не Iterable?
140
141
142
143
h3. Как перебрать все пары ключ-значение в Map учитывая, что Map - это не Iterable?
144
145
146
147
h3. В чем проявляется "сортированность" SortedMap, кроме того, что toString() выводит все по порядку?
148
149
150
151
h3. Как одним вызовом копировать элементы из любой Collection в массив?
152
153
154
155
h3. Реализуйте симметрическую разность двух коллекций используя методы Collection(addAll(), removeAll(), retainAll()).
156
157
158
159
h3. Сравните Enumeration и Iterator.
160
161
162
163
h3. Как между собой связаны Iterable и Iterator?
164
165
166
167
h3. Как между собой связаны Iterable, Iterator и "for-each " введенный в Java 5?
168
169
170
171
h3. Сравните Iterator и ListIterator.
172
173
174
175
h3. Что произойдет, если я вызову Iterator.next() не "спросив" Iterator.hasNext()?
176
177
178
179
h3. Что произойдет, если я вызову Iterator.next() перед этим 10 раз вызвав Iterator.hasNext()? Я пропущу 9 элементов?
180
181
182
183
h3. Если у меня есть коллекция и порожденный итератор, изменится ли коллекция, если я вызову iterator.remove()?
184
185
186
187
h3. Если у меня есть коллекция и порожденный итератор, изменится ли итератор, если я вызову collection.remove(..)?
188
189
190
191
h3. Зачем добавили ArrayList, если уже был Vector?
192
193
194
195
h3. В реализации класса ArrayList есть следующие поля: Object[] elementData, int size.
196
197
198
199
h3. Объясните, зачем хранить отдельно size, если всегда можно взять elementData.length?
200
201
202
203
h3. LinkedList - это односвязный, двусвязный или четырехсвязный список?
204
205
206
207
h3. Какое худшее время работы метода contain() для элемента, который есть в LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
208
209
210
211
h3. Какое худшее время работы метода contain() для элемента, который есть в ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
212
213
214
215
h3. Какое худшее время работы метода add() для LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
216
217
218
219
h3. Какое худшее время работы метода add() для ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
220
221
222
223
h3. Сколько выделяется элементов в памяти при вызове ArrayList.add()?
224
225
226
227
h3. Сколько выделяется элементов в памяти при вызове LinkedList.add()?
228
229
230
231
h3. Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
232
233
234
235
h3. Оцените количество памяти на хранение одного примитива типа byte в ArrayList?
236
237
238
239
h3. Я добавляю элемент в середину List-а: list.add(list.size()/2, newElem). Для кого эта операция медленнее - для ArrayList или для LinkedList?
240
241
242
243
h3. Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)?
244
245
246
247
h3. Как одним вызовом из List получить List со всеми элементами, кроме первых и последних 3-х?
248
249
250
251
h3. Могут ли у разных объектов в памяти (ref0 != ref1) быть ref0.hashCode() == ref1.hashCode()?
252
253
254
255
h3. Могут ли у разных объектов в памяти (ref0 != ref1) быть ref0.equals(ref1) == true?
256
257
258
259
h3. Могут ли у разных ссылок на один объект в памяти (ref0 == ref1) быть ref0.equals(ref1) == false?
260
261
262
263
h3. Есть класс Point{int x, y;}. Почему хэш-код в виде 31 * x + y предпочтительнее чем x + y?
264
265
266
267
h3. Если у класса Point{int x, y;} "правильно " реализовать метод equals (return ref0.x == ref1.x && ref0.y == ref1.y), но сделать хэш-код в виде int hashCode() {return x;}, то будут ли корректно такие точки помещаться и извлекаться из HashSet?
268
269
270
271
h3. equals() порождает отношение эквивалентности. Какими из свойств обладает такое отношение: коммутативность, симметричность, рефлексивность, дистрибутивность, ассоциативность, транзитивность?
272
273
274
275
h3. Можно ли так реализовать equals(Object that) {return this.hashCode() == that.hashCode()}?
276
277
278
279
h3. В equals требуется проверять, что аргумент (equals(Object that)) такого же типа как и сам объект. В чем разница между this.getClass() == that.getClass() и that instanceof MyClass?
280
281
282
h3. Можно ли реализовать метод equals класса MyClass вот так: class MyClass {public boolean equals(MyClass that) {return this == that;}}?
283
284
285
h3. Будет ли работать HashMap, если все ключи будут возвращать int hashCode() {return 42;}?
286
287
288
h3. Зачем добавили HashMap, если уже был Hashtable?
289
290
291
h3. Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресацией и на основе метода цепочек. Как реализована HashMap? Почему так сделали (по вашему мнению)? В чем минусы и плюсы каждого подхода?
292
293
294
h3. Сколько переходов по ссылкам происходит, когда вы делаете HashMap.get(key) по ключу, который есть в таблице?
295
296
297
h3. Сколько создается новых объектов, когда вы добавляете новый элемент в HashMap?
298
299
300
h3. Как работает HashMap при попытке сохранить в нее два элемента по ключам с одинаковым hashCode, но для которых equals == false?
301
302
303
h3. HashMap может выродиться в список даже для ключей с разным hashCode. Как это возможно?
304
305
306
h3. Какое худшее время работы метода get(key) для ключа, которого нет в таблице (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
307
308
309
h3. Какое худшее время работы метода get(key) для ключа, который есть в таблице (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
310
311
312
h3. Объясните смысл параметров в конструкторе HashMap(int initialCapacity, float loadFactor).
313
314
315
h3. В чем разница между HashMap и IdentityHashMap? Для чего нужна IdentityHashMap? Как может быть полезна для реализации сериализации или клонирования?
316
317
318
h3. В чем разница между HashMap и WeakHashMap? Для чего нужна WeakHashMap?
319
320
321
h3. В WeakHashMap используются WeakReferences. А почему бы не создать SoftHashMap на SoftReferences?
322
323
324
h3. В WeakHashMap используются WeakReferences. А почему бы не создать PhantomHashMap на PhantomReferences?
325
326
327
h3. Сделайте HashSet из HashMap (используйте только множество ключей, но не множество значений).
328
329
330
h3. Сделайте HashMap из HashSet (HashSet<Map.Entry<K, V>>)
331
332
333
h3. Сравните интерфейсы java.util.Queue и java.util.Deque.
334
335
336
h3. Кто кого расширяет: Queue расширяет Deque, или Deque расширяет Queue?
337
338
339
h3. Почему LinkedList реализует и List, и Deque?
340
341
342
h3. В чем разница между классами java.util.Arrays и java.lang.reflect.Array?
343
344
345
h3. В чем разница между классами java.util.Collection и java.util.Collections?
346
347
348
h3. Напишите НЕмногопоточную программу, которая заставляет коллекцию выбросить ConcurrentModificationException.
349
350
351
h3. Что такое "fail-fast поведение"?
352
353
354
h3. Для множеств еnum-ов есть специальный класс java.util.EnumSet? Зачем? Чем авторов не устраивал HashSet или TreeSet?
355
356
357
h3. java.util.Stack - считается "устаревшим". Чем его рекомендуют заменять? Почему?
358
359
360
h3. Какая коллекция реализует дисциплину обслуживания FIFO?
361
362
363
h3. Какая коллекция реализует дисциплину обслуживания FILO?
364
365
366
h3. Приведите пример, когда какая-либо коллекция выбрасывает UnsupportedOperationException.
367
368
369
h3. Почему нельзя написать "ArrayList<List> numbers = new ArrayList<ArrayList>();" но можно "List<ArrayList> numbers = new ArrayList<ArrayList>();"?
370
371
372
h3. LinkedHashMap - что это еще за "зверь"? Что в нем от LinkedList, а что от HashMap?
373
374
375
h3. LinkedHashSet - что это еще за "зверь"? Что в нем от LinkedList, а что от HashSet?
376
377
378
h3. Говорят, на LinkedHashMap легко сделать простенький кэш c "invalidation policy", знаете как?
379
380
381
h3. Что позволяет сделать PriorityQueue?
382
383
384
h3. В чем заключаются отличия java.util.Comparator от java.lang.Comparable?
Go to top