Домой Учебники по Java и J2EE Java: HashSet против TreeSet — разница между HashSet и TreeSet в Java

Java: HashSet против TreeSet — разница между HashSet и TreeSet в Java

2177
0

Во время поиска решения для моего исключения Java в Интернете в StackOverflow было найдено очень хорошее объяснение некоторого базового различия между HashSet и TreeSet.

HashSet намного быстрее, чем TreeSet (постоянное время и время регистрации для большинства операций, таких как добавление, удаление и удержание), но не дает никаких гарантий упорядочения, таких как TreeSet.

HashSet:

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

TreeSet:

  • гарантирует log (n) затраты времени на основные операции (добавление, удаление и содержание)
  • гарантирует, что элементы множества будут отсортированы (по возрастанию, натуральные или те, которые вы указали через его конструктор)
  • не предлагает никаких параметров настройки для выполнения итерации
  • предлагает несколько удобных методов для работы с упорядоченным набором, таких как first (), last (), headSet (), tailSet () и т. д.
ЧИТАТЬ ТАКЖЕ:  Кассандра и java.lang.UnsatisfiedLinkError: нет ошибки snappyjava в java.library.path

Важные моменты:

  • Оба гарантируют коллекцию элементов без дубликатов
  • Как правило, быстрее добавлять элементы в HashSet, а затем преобразовывать коллекцию в TreeSet для сортированного обхода без дубликатов.
  • Ни одна из этих реализаций не синхронизирована. То есть, если несколько потоков обращаются к набору одновременно, и хотя бы один из потоков модифицирует набор, он должен быть синхронизирован извне.
  • LinkedHashSet в некотором смысле является промежуточным звеном между HashSet и TreeSet. Реализован в виде хеш-таблицы с проходящим через нее связанным списком, однако он обеспечивает упорядоченную итерацию, которая не совпадает с сортированным обходом, гарантированным TreeSet .

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

e.g. Set s = new TreeSet(hashSet);

Еще несколько учебных пособий по Java: https://crunchify.com/java-web-development-tutorial/

Java: HashSet против TreeSet — разница между HashSet и TreeSet в Java

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь