Ответ на "Чем различаются Enumeration и Iterator?"
Хотя оба интерфейса и предназначены для обхода коллекций между ними имеются существенные различия:
• с помощью
• в
•
#вопросы_с_собеседований
Хотя оба интерфейса и предназначены для обхода коллекций между ними имеются существенные различия:
• с помощью
Enumeration
нельзя добавлять/удалять элементы;• в
Iterator
исправлены имена методов для повышения читаемости кода (Enumeration.hasMoreElements()
соответствует Iterator.hasNext()
, Enumeration.nextElement()
соответствует Iterator.next()
и т.д);•
Enumeration
присутствуют в устаревших классах, таких как Vector
/Stack
, тогда как Iterator
есть во всех современных классах-коллекциях.#вопросы_с_собеседований
🔥6
Сравните Iterator и ListIterator.
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
👍4
Ответ на "Сравните Iterator и ListIterator."
•
•
•
• При помощи
#вопросы_с_собеседований
•
ListIterator
расширяет интерфейс Iterator
• ListIterator
может быть использован только для перебора элементов коллекции List
;•
Iterator
позволяет перебирать элементы только в одном направлении, при помощи метода next()
. Тогда как ListIterator
позволяет перебирать список в обоих направлениях, при помощи методов next()
и previous()
;•
ListIterator
не указывает на конкретный элемент: его текущая позиция располагается между элементами, которые возвращают методы previous()
и next()
.• При помощи
ListIterator
вы можете модифицировать список, добавляя/удаляя элементы с помощью методов add()
и remove()
. Iterator
не поддерживает данного функционала.#вопросы_с_собеседований
🔥9👍1
Как поведёт себя коллекция, если вызвать 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?
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований
Пишите в комментариях ваш вариант. Ответ будет у нас в канале.
#вопросы_с_собеседований