بارگیری داده
بارگیری داده
بارگیری داده
Iterableимеет только один метод -
iterator(), который возвращает
Iterator. #вопросы_с_собеседований
Enumerationнельзя добавлять/удалять элементы; • в
Iteratorисправлены имена методов для повышения читаемости кода (
Enumeration.hasMoreElements()соответствует
Iterator.hasNext(),
Enumeration.nextElement()соответствует
Iterator.next()и т.д); •
Enumerationприсутствуют в устаревших классах, таких как
Vector/
Stack, тогда как
Iteratorесть во всех современных классах-коллекциях. #вопросы_с_собеседований
fail-fastповедение означает, что при возникновении ошибки или состояния, которое может привести к ошибке, система немедленно прекращает дальнейшую работу и уведомляет об этом. Использование
fail-fastподхода позволяет избежать недетерминированного поведения программы в течение времени. В Java Collections API некоторые итераторы ведут себя как fail-fast и выбрасывают
ConcurrentModificationException, если после его создания была произведена модификация коллекции, т.е. добавлен или удален элемент напрямую из коллекции, а не используя методы итератора. Реализация такого поведения осуществляется за счет подсчета количества модификаций коллекции (
modification count): • при изменении коллекции счетчик модификаций так же изменяется; • при создании итератора ему передается текущее значение счетчика; • при каждом обращении к итератору сохраненное значение счетчика сравнивается с текущим, и, если они не совпадают, возникает исключение. #вопросы_с_собеседований
java.util.Collections- набор статических методов для работы с коллекциями.
java.util.Collection- один из основных интерфейсов
Java Collections Framework. #вопросы_с_собеседований
hashCode()необходим для вычисления хэш кода переданного в качестве входного параметра объекта. В Java это целое число, в более широком смысле - битовая строка фиксированной длины, полученная из массива произвольной длины. Этот метод реализован таким образом, что для одного и того же входного объекта, хэш код всегда будет одинаковым. Следует понимать, что в Java множество возможных хэш кодов ограничено типом
int, а множество объектов ничем не ограничено. Из-за этого, вполне возможна ситуация, что хэш коды разных объектов могут совпасть: • если хэш коды разные, то и объекты гарантированно разные; • если хэш коды равны, то объекты могут не обязательно равны. #вопросы_с_собеседований
Object.equals()сводится к проверке на равенство двух ссылок:
public boolean equals(Object obj) { return (this == obj); }Реализация метода
Object.hashCode()описана как
native, т.е. определенной не с помощью Java кода и обычно возвращает адрес объекта в памяти:
public native int hashCode();#вопросы_с_собеседований
HashMapэто может привести к тому, что пара «ключ-значение», которая была в неё помещена при использовании нового экземпляра ключа не будет в ней найдена. #вопросы_с_собеседований
equals()нужно обязательно переопределять и метод
hashCode(). #вопросы_с_собеседований
x, x.equals(x)вернет
true; • Симметричность: для любых ссылок на значения
xи
y,
x.equals(y)должно вернуть
true, тогда и только тогда, когда
y.equals(x)возвращает
true. • Транзитивность: для любых ссылок на значения
x,
yи
z, если
x.equals(y)и
y.equals(z)возвращают
true, тогда и
x.equals(z)вернёт
true; • Непротиворечивость: для любых ссылок на значения
хи
у, если несколько раз вызвать
х.equals(y), постоянно будет возвращаться значение
trueлибо постоянно будет возвращаться значение
falseпри условии, что никакая информация, используемая при сравнении объектов, не поменялась. Для любой ненулевой ссылки на значение
хвыражение
х.equals(null)должно возвращать
false. #вопросы_с_собеседований
equals()- определяет отношение эквивалентности объектов. При сравнении объектов с помощью
==сравнение происходит лишь между ссылками. При сравнении по переопределённому разработчиком
equals()- по внутреннему состоянию объектов. #вопросы_с_собеседований