В чем разница между ними? я знаю это
LinkedHashSet - это упорядоченная версия HashSet, которая поддерживает двусвязный список для всех элементов. Используйте этот класс вместо HashSet, если вам важен порядок итераций. Когда вы перебираете HashSet, порядок непредсказуем, а LinkedHashSet позволяет перебирать элементы в том порядке, в котором они были вставлены.
Но в исходном коде LinkedHashSet есть только вызывающие конструкторы HashSet. Итак, где же двойной список и порядок вставки?
java
hashset
linkedhashset
Shikarn-О
источник
источник
Ответы:
Ответ заключается в том, который конструкторы в
LinkedHashSet
использование для построения базового класса:И (один пример)
HashSet
конструктор, который принимает логический аргумент, описан и выглядит так:источник
LinkedHashSet
конструкторы вызывают следующий конструктор базового класса:Как видите, внутренняя карта является
LinkedHashMap
. Если вы загляните внутрьLinkedHashMap
, вы обнаружите следующее поле:Это связанный список в вопросе.
источник
HashSet является неупорядоченным и несортированным множеством.
LinkedHashSet является заказанной версией HashSet.
Единственная разница между HashSet и LinkedHashSet заключается в том, что:
LinkedHashSet поддерживает порядок вставки.
Когда мы выполняем итерацию по HashSet , порядок непредсказуем, тогда как в случае LinkedHashSet он предсказуем .
Причина того, как LinkedHashSet поддерживает порядок вставки, заключается в следующем:
лежащая в основе используемая структура данных - Doubly-Linked-List .
источник
Вы должны смотреть на источник
HashSet
конструктора он называет ... это специальный конструктор , который делает поддержку вместо просто .Map
LinkedHashMap
HashMap
источник
Я предлагаю вам использовать
LinkedHashSet
большую часть времени, потому что он имеет лучшую производительность в целом ):HashMap
, потому что большую часть времени мы используем структуры Set для итерации.Вы можете увидеть исходную страницу тестирования здесь: Пример финального тестирования производительности
источник
HashSet: неупорядоченный на самом деле. если вы передаете параметр означает
Out Put: может быть
2,1,3
не предсказуемо. в следующий раз другой заказ.LinkedHashSet()
которые производят заказ FIFO.источник
HashSet
не поддерживать порядок вставки элементаLinkedHashSet
поддерживать порядок вставки элементапример
HashSet
выводLinkedHashSet
выводисточник
HashSet:
Подчеркнутая структура данных - Hashtable. Дублирование объектов не допускается. Порядок вставки не сохраняется и основан на хэш-коде объектов. Нулевая вставка возможна (только один раз). Он реализует Serializable, Clonable, но не интерфейс RandomAccess. HashSet лучше всего выбрать, если частой операцией является операция поиска.
Конструкторы:
LinkedHashSet:
Это дочерний класс HashSet. он точно такой же, как и HashSet (конструкторы и методы), за исключением следующих различий.
Отличия HashSet:
LinkedHashSet:
источник
Если вы посмотрите на конструкторы, вызываемые из
LinkedHashSet
класса, вы увидите, что внутренне это - то,LinkedHashMap
что используется для целей поддержки.источник
Все методы и конструкторы одинаковы, но есть только одно отличие: LinkedHashset будет поддерживать порядок вставки, но не будет разрешать дублирование.
Hashset не будет поддерживать порядок вставки. Это сочетание List и Set просто :)
источник