7 ответов:
A
Setпредставляет собой общий "набор значений". АTreeSet- это набор, в котором элементы отсортированы (и, следовательно, упорядочены), aHashSet- это набор, где элементы не отсортированный или заказать.A
HashSetобычно намного быстрее, чемTreeSet.A
TreeSetобычно реализуется в виде красно-черного дерева (см. http://en.wikipedia.org/wiki/Red-black_tree - я не проверил фактическую реализацию sun / oracleTreeSet), тогда как aHashSetиспользуетObject.hashCode()для создания индекса в массиве. Время доступа к красно-черному дереву -O(log(n))в то время как время доступаHashSetколеблется от постоянного времени до наихудшего случая (каждый элемент имеет один и тот же хэш-код), где вы можете иметь линейное время поискаO(n).
на этот вопрос был дан ответ, но я не видел ответа на то, почему код упоминает оба типа в одном коде.
Как правило, вы хотите кодировать против интерфейсов, которые в этом случае установлены. Зачем? Потому что если вы всегда ссылаетесь на свой объект через интерфейсы (кроме нового HashSet ()), то тривиально изменить реализацию объекта позже, если вы обнаружите, что это было бы лучше сделать, потому что вы только один раз упомянули его в своей базе кода (где вы сделали новый HashSet ()).
Set-это общий интерфейс для набора, подобного набору, в то время как HashSet-это конкретная реализация интерфейса Set (который использует хэш-коды, следовательно, имя).
Set-это родительский интерфейс всех классов набора, таких как TreeSet, LinkedHashSet и т. д.
HashSet-это класс, реализующий интерфейс набора.
Set - это коллекция, которая не содержит повторяющихся элементов. Набор-это интерфейс.
HashSet осуществляет
Setинтерфейс, поддерживаемый хэш-таблицей (на самом деле aHashMapэкземпляр).С
HashSetявляется одной из конкретных реализацийSetинтерфейс.A
Setможет быть любой из следующих, так как он был реализован ниже классовConcurrentSkipListSet: A масштабируемая параллельная реализация NavigableSet на основе
ConcurrentSkipListMap. Элементы набора сортируются в соответствии с их естественным порядком, или с помощьюComparatorпредоставляется во время создания набора, в зависимости от того, какой конструктор используется.CopyOnWriteArraySet : набор, который использует внутренний CopyOnWriteArrayList для всех своих операций.
EnumSet : специализированная реализация набора для использования с типами перечислений. Все элементы внутри набор перечислений должен исходить из одного типа перечисления, который явно или неявно указывается при создании набора.
TreeSet :реализация навигационного набора на основе карты дерева. Элементы упорядочиваются с помощью их естественного упорядочения или с помощью компаратора, предоставляемого во время создания набора, в зависимости от того, какой конструктор используется.
LinkedHashSet: таблица золы и реализация связанного списка интерфейса набора, с предсказуемым порядок итераций. Эта реализация отличается от HashSet тем, что она поддерживает двусвязный список, проходящий через все его записи.
но
HashSetможет быть толькоLinkedHashSetСLinkedHashSetподклассыHashSet
Я думаю, что вы должны прочитать javadoc для HashSet
Comments