Главная страница

Коллекции. Потоки Байтовые потоки InputStream и OutputStream. Символьные потоки Reader и Writer


Скачать 32.99 Kb.
НазваниеПотоки Байтовые потоки InputStream и OutputStream. Символьные потоки Reader и Writer
АнкорCollection
Дата28.11.2022
Размер32.99 Kb.
Формат файлаdocx
Имя файлаКоллекции.docx
ТипДокументы
#817647
страница4 из 4
1   2   3   4


Разница между Iterator и Iterable?

Iterable - это простое представление серии элементов, которые могут быть итерированы поверх. У него нет никакого состояния итерации такого как "текущий элемент". Вместо этого у него есть один метод, который производит Iterator.
1. Iterator - это объект с состоянием итерации. Он позволяет проверить, есть ли у него больше элементов с помощью hasNext() и переместиться на следующий элемент (если есть) с помощью next(). И метод Remove.


Зачем в итераторе метод remove?

Для удаления элемента из коллекции при обходе;
Перед этим необходимо вызвать метод next(). Для того что бы перейти на элемент который нужно удалить.


В чем разница между Iterator и ListIterator?

Iterator может использоваться для перебора любых коллеций Set, List и Map. В отличие от него, ListIterator может быть использован только для перебора элементов коллекции List.
Iterator позволяет перебирать элементы только в одном направлении, при помощи метода next(). И удалять методом remove() Тогда как ListIterator позволяет перебирать список в обоих направлениях, при помощи методов next() и previous(), модифицировать список, добавляя/удаляя элементы с помощью методов add() и remove().


Какие есть способы перебора всех элементов List?

Iterator, listIterator, for, forEach,While

В чём различие между fail-fast и fail-safe итераторами?

Fail-fast итератор генерирует исключение ConcurrentModificationException, если коллекция меняется во время итерации, а fail-safe - нет.

Что делать, чтобы не возникло исключение ConcurrentModificationException?

Можно подобрать другой итератор, работающий по принципу fail-safe. К примеру, если вы используете List, то можете взять ListIterator. Если же вам нужна устаревшая коллекция — то используйте перечислители.
В том случае, когда вышеизложенное вам не подходит, у вас есть три варианта:
1. При использовании JDK 1.5 или выше, вам подойдут классы ConcurrentHashMap и CopyOnWriteArrayList. Это самый лучший вариант
2. Вы можете преобразовать список в массив и перебирать массив
3. Вы можете блокировать изменения списка на время перебора с помощью блока synchronized.

Обратите внимание, что последние два варианта негативно скажутся на производительности.

Как реализован цикл foreach?

Реализован на основе Iterator.

Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?

Итератор похож на указатель своими основными операциями: он указывает на отдельный элемент коллекции объектов (предоставляет доступ к элементу) и содержит функции для перехода к другому элементу списка (следующему или предыдущему).
Контейнер, который реализует поддержку итераторов, должен предоставлять первый элемент списка, а также возможность проверить, перебраны ли все элементы контейнера (является ли итератор конечным).
Таким образом без курсора просто нельзя будет реализовать безошибочное передвижение по коллекции.


В чем разница между интерфейсами Comparable и Comparator?

Коротко:
Comparable используется для естественной сортировки(по возрастанию).
Comparator для сортировки по разным шаблонам.

Подробно:
Классы-обертки как Integer, Double и String реализуют интерфейс Comparable. По этому метод sort ,без параметров может сортировать эти объекты.
Интерфейс Comparable может быть реализован именно элементами коллекции или ключами Map.
Так же интерфейсом Comparable может пользоваться любой класс который его реализует и переопределяет.
Если у вас нет доступа к классу можно реализовать интерфейс Comparator.
Comparator реализуется отдельным объектом (это удобно, так как можно заготовить несколько реализаций для разных правил сортировок, не меняя при этом код элементов коллекции/ключей Map).


Почему коллекции не наследуют интерфейсы Cloneable и Serializable?

Клонирование и сериализация являются очень узкоспецифичными операциями, и реализовывать их нужно только когда это необходимо.
Так же каждая операция клонирования потребляет очень много памяти, и неопытные программисты могут расходовать ее сами не понимая последствий.


Что возвращает Comparator и Comparable?

0 если объекты равны.
-1 (отрицательное число) если сравниваемый объект(1 объект) меньше передаваемого(2го объекта)
1 (положительное число) если сравниваемый объект(1 объект) больше передаваемого(2го объекта)


Какой метод у Comparator и Comparable?

public int compare(Person a, Person b)
public int compareTo(Person p)
1   2   3   4


написать администратору сайта