Этот класс реализует интерфейс Set, поддерживаемый хеш-таблицей
(на самом деле экземпляр HashMap). Это не дает никаких гарантий относительно
порядок итераций множества; в частности, это не гарантирует, что
порядок останется неизменным со временем. Этот класс допускает нуль
элемент.
Этот класс обеспечивает постоянное время выполнения основных операций.
(добавить, удалить, содержит и размер), предполагая, что хеш-функция расходится
элементы правильно среди ведер. Итерация по этому набору
требуется время, пропорциональное сумме размера экземпляра HashSet
(количество элементов) плюс «емкость» HashMap поддержки
экземпляр (количество ведер). Таким образом, очень важно не устанавливать
слишком высокая начальная емкость (или слишком низкий коэффициент нагрузки), если
производительность итерации важна.
Обратите внимание, что эта реализация не синхронизирована. Если несколько потоков
получить доступ к хэшу, установленному одновременно, и хотя бы к одному из потоков
изменяет набор, он должен быть синхронизирован извне. Это
обычно достигается путем синхронизации на некотором объекте, который, естественно,
инкапсулирует набор. Если такого объекта не существует, набор должен быть
«обернутый» с использованием метода Collections.synchronizedSet. Это лучше
сделано во время создания, чтобы предотвратить случайный несинхронизированный доступ к
набор:
Set s = Collections.synchronizedSet (new HashSet (...));
Итераторы, возвращаемые методом итератора этого класса, работают быстро:
если набор изменяется в любое время после создания итератора, в
любым способом, кроме как через собственный метод удаления итератора, итератор
генерирует исключение ConcurrentModificationException. Таким образом, перед лицом
одновременная модификация, итератор быстро и чисто дает сбой,
вместо того, чтобы рисковать произвольным, недетерминированным поведением в
неопределенное время в будущем.
Обратите внимание, что отказоустойчивое поведение итератора не может быть гарантировано
поскольку вообще невозможно сделать какие-либо жесткие гарантии
при наличии несинхронизированной параллельной модификации. Нормально-быстро
итераторы создают исключение ConcurrentModificationException
основа. Поэтому было бы неправильно писать программу, которая зависела
на этом исключении для его правильности: отказоустойчивое поведение
итераторы должны использоваться только для обнаружения ошибок.
Этот класс является членом Java Collections Framework.