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? |