Как поведёт себя коллекция, если вызвать iterator.remove()?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Как поведёт себя коллекция, если вызвать iterator.remove()?"
Если вызову
#вопросы_с_собеседований
Если вызову
iterator.remove()
предшествовал вызов iterator.next()
, то iterator.remove()
удалит элемент коллекции, на который указывает итератор, в противном случае будет выброшено IllegalStateException()
.#вопросы_с_собеседований
🔥10
Как поведёт себя уже инстанциированный итератор для collection, если вызвать collection.remove()?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Как поведёт себя уже инстанциированный итератор для collection, если вызвать collection.remove()?"
При следующем вызове методов итератора будет выброшено
#вопросы_с_собеседований
При следующем вызове методов итератора будет выброшено
ConcurrentModificationException
.#вопросы_с_собеседований
Как избежать ConcurrentModificationException во время перебора коллекции?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍1
Ответ на "Как избежать ConcurrentModificationException во время перебора коллекции?"
• Попробовать подобрать или реализовать самостоятельно другой итератор, работающий по принципу
• Использовать
• Преобразовать список в массив и перебирать массив.
• Блокировать изменения списка на время перебора с помощью блока
Отрицательная сторона последних двух вариантов - ухудшение производительности.
#вопросы_с_собеседований
• Попробовать подобрать или реализовать самостоятельно другой итератор, работающий по принципу
fail-safe
.• Использовать
ConcurrentHashMap
и CopyOnWriteArrayList
.• Преобразовать список в массив и перебирать массив.
• Блокировать изменения списка на время перебора с помощью блока
synchronized
.Отрицательная сторона последних двух вариантов - ухудшение производительности.
#вопросы_с_собеседований
👍5
Какая коллекция реализует дисциплину обслуживания FIFO?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Какая коллекция реализует дисциплину обслуживания FIFO?"
FIFO, First-In-First-Out («первым пришел-первым ушел») - по этому принципу построена коллекция
#вопросы_с_собеседований
FIFO, First-In-First-Out («первым пришел-первым ушел») - по этому принципу построена коллекция
Queue
.#вопросы_с_собеседований
Зачем добавили ArrayList, если уже был Vector?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Книги по Java - канал, где вы можете бесплатно КАЧАТЬ книги по Java программированию в два клика.
- качай книги
- читай
- становись программистом.
- зарабатывай 100-400 тысяч рублей.
Все книги 2019-2023 годов. Много русскоязычных.
Подписывайтесь и качайте: @booksforjava
- качай книги
- читай
- становись программистом.
- зарабатывай 100-400 тысяч рублей.
Все книги 2019-2023 годов. Много русскоязычных.
Подписывайтесь и качайте: @booksforjava
Ответ на "Зачем добавили ArrayList, если уже был Vector?"
• Методы класса
• По умолчанию,
#вопросы_с_собеседований
• Методы класса
Vector
синхронизированы, а ArrayList
- нет;• По умолчанию,
Vector
удваивает свой размер, когда заканчивается выделенная под элементы память. ArrayList
же увеличивает свой размер только на половину.Vector
это устаревший класс и его использование не рекомендовано.#вопросы_с_собеседований
👍4👎1
Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?"
ArrayList:
• доступ к произвольному элементу по индексу за константное время
• доступ к элементам по значению за линейное время
• вставка в конец в среднем производится за константное время
• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (
• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.
LinkedList:
• на получение элемента по индексу или значению потребуется линейное время
• на добавление и удаление в начало или конец списка потребуется константное
• вставка или удаление в/из произвольного место константное
• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.
В целом,
#вопросы_с_собеседований
ArrayList
это список, реализованный на основе массива, а LinkedList
— это классический двусвязный список, основанный на объектах с ссылками между ними.ArrayList:
• доступ к произвольному элементу по индексу за константное время
O(1)
;• доступ к элементам по значению за линейное время
O(N)
;• вставка в конец в среднем производится за константное время
O(1)
;• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (
capacity
) не изменяется);• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.
LinkedList:
• на получение элемента по индексу или значению потребуется линейное время
O(N)
;• на добавление и удаление в начало или конец списка потребуется константное
O(1)
;• вставка или удаление в/из произвольного место константное
O(1)
;• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.
В целом,
LinkedList
в абсолютных величинах проигрывает ArrayList
и по потребляемой памяти, и по скорости выполнения операций. LinkedList
предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.#вопросы_с_собеседований
👍2
Какое худшее время работы метода contains() для элемента, который есть в LinkedList?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍2
Ответ на "Какое худшее время работы метода contains() для элемента, который есть в LinkedList?"
#вопросы_с_собеседований
O(N)
. Время поиска элемента линейно пропорционально количеству элементов в списке.#вопросы_с_собеседований
Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍1
Ответ на "Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?"
При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость,
#вопросы_с_собеседований
При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость,
capacity
) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize()
.#вопросы_с_собеседований
👍6
Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Ответ на "Оцените количество памяти на хранение одного примитива типа byte в LinkedList?"
Каждый элемент
Для
#вопросы_с_собеседований
Каждый элемент
LinkedList
хранит ссылку на предыдущий элемент, следующий элемент и ссылку на данные.static class Node<E> {Для
E item;
Node<E> next;
Node<E> prev;
//...
}
32-битных
систем каждая ссылка занимает 32 бита
(4 байта
). Сам объект (заголовок) вложенного класса Node
занимает 8 байт
. 4 + 4 + 4 + 8 = 20 байт
, а т.к. размер каждого объекта в Java
кратен 8
, соответственно получаем 24 байта
. Примитив типа byte
занимает 1 байт
памяти, но в JCF
примитивы упаковываются: объект типа Byte
занимает в памяти 16 байт
(8 байт
на заголовок объекта, 1 байт
на поле типа byte
и 7 байт
для кратности 8
). Также напомню, что значения от -128
до 127
кэшируются и для них новые объекты каждый раз не создаются. Таким образом, в x32 JVM 24 байта
тратятся на хранение одного элемента в списке и 16 байт
- на хранение упакованного объекта типа Byte
. Итого 40 байт
.Для
64-битной JVM
каждая ссылка занимает 64 бита
(8 байт
), размер заголовка каждого объекта составляет 16 байт
(два машинных слова). Вычисления аналогичны: 8 + 8 + 8 + 16 = 40байт
и 24 байта
. Итого 64 байта
.#вопросы_с_собеседований
👍10
Оцените количество памяти на хранение одного примитива типа byte в ArrayList?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍1