В чем разница между HashSet и Set?



видел фрагмент кода, как



Set<Record> instances = new HashSet<Record>();


Мне интересно, является ли Hashset особым видом набора. Есть ли между ними разница?

939   7  

7 ответов:

A Set представляет собой общий "набор значений". А TreeSet - это набор, в котором элементы отсортированы (и, следовательно, упорядочены), a HashSet - это набор, где элементы не отсортированный или заказать.

A HashSet обычно намного быстрее, чем TreeSet.

A TreeSet обычно реализуется в виде красно-черного дерева (см. http://en.wikipedia.org/wiki/Red-black_tree - я не проверил фактическую реализацию sun / oracle TreeSet), тогда как a HashSet использует Object.hashCode() для создания индекса в массиве. Время доступа к красно-черному дереву -O(log(n)) в то время как время доступа HashSet колеблется от постоянного времени до наихудшего случая (каждый элемент имеет один и тот же хэш-код), где вы можете иметь линейное время поиска O(n).

The HashSet воплощение Set.

на этот вопрос был дан ответ, но я не видел ответа на то, почему код упоминает оба типа в одном коде.

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

Set-это общий интерфейс для набора, подобного набору, в то время как HashSet-это конкретная реализация интерфейса Set (который использует хэш-коды, следовательно, имя).

Set-это родительский интерфейс всех классов набора, таких как TreeSet, LinkedHashSet и т. д.

HashSet-это класс, реализующий интерфейс набора.

Set - это коллекция, которая не содержит повторяющихся элементов. Набор-это интерфейс.

HashSet осуществляет Set интерфейс, поддерживаемый хэш-таблицей (на самом деле a HashMap экземпляр).

С HashSet является одной из конкретных реализаций Set интерфейс.

ASet может быть любой из следующих, так как он был реализован ниже классов

ConcurrentSkipListSet: A масштабируемая параллельная реализация NavigableSet на основе ConcurrentSkipListMap. Элементы набора сортируются в соответствии с их естественным порядком, или с помощью Comparator предоставляется во время создания набора, в зависимости от того, какой конструктор используется.

CopyOnWriteArraySet : набор, который использует внутренний CopyOnWriteArrayList для всех своих операций.

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

TreeSet :реализация навигационного набора на основе карты дерева. Элементы упорядочиваются с помощью их естественного упорядочения или с помощью компаратора, предоставляемого во время создания набора, в зависимости от того, какой конструктор используется.

LinkedHashSet: таблица золы и реализация связанного списка интерфейса набора, с предсказуемым порядок итераций. Эта реализация отличается от HashSet тем, что она поддерживает двусвязный список, проходящий через все его записи.

но HashSet может быть только LinkedHashSet С LinkedHashSet подклассы HashSet

Я думаю, что вы должны прочитать javadoc для HashSet

Comments

    Ничего не найдено.