Подтвердить что ты не робот

Каковы плюсы и минусы TreeSet

Просто интересно, что за плюсы и минусы TreeSet, если кто-нибудь может сказать мне, пожалуйста? Спасибо!

4b9b3361

Ответ 1

Один из классов коллекции. Он позволяет вам получить доступ к элементам в вашей коллекции с помощью ключа или последовательно с помощью ключа. Он имеет значительно больше накладных расходов, чем ArrayList или HashMap. Используйте HashSet, когда вам не нужен последовательный доступ, просто найдите ключ. Используйте ArrayList и используйте массивы. сортировка, если вы просто хотите, чтобы элементы были в порядке. TreeSet всегда сохраняет элементы в порядке. С ArrayList вы просто сортируете, когда вам нужно. С TreeSets ключ должен быть встроен в объект, который вы храните в коллекции. Часто у вас может быть TreeSet of Strings. Все, что вы можете сделать, это указать, задана ли данная строка в наборе. Он не найдет вам связанный объект, каким он будет Treemap. С помощью TreeMap ключи и связанные с ними объекты являются отдельными.

TreeSet и его брат TreeMap странно не имеют ничего общего с представлением деревьев. Внутри они используют организацию дерева, чтобы дать вам отсортированный по алфавиту Set/Map, но у вас нет контроля над ссылками между родителями и детьми.

Внутри TreeSet используются красно-черные деревья. Нет необходимости пресекать данные, чтобы получить сбалансированное дерево. С другой стороны, если данные сортируются (восходящие или нисходящие), это не повредит, как это происходит с некоторыми другими типами деревьев.

Если вы не предоставите Компаратор для определения требуемого заказа, TreeSet требует реализации Comparable для класса item для определения естественного порядка.

Ответ 2

Минусы: одна ошибка с TreeSet заключается в том, что она неожиданно реализует интерфейс Set. Если TreeSet содержит объект a, тогда объект b считается частью набора, если a.compareTo(b) возвращает 0, даже если a.equals(b) является ложным, поэтому, если compareTo и equals не реализованы согласованным образом, вы находитесь в плохой поездке.

Это особенно проблема, когда метод возвращает Set, и вы не знаете, является ли реализация TreeSet или, например, HashSet.

Урок, чтобы узнать здесь, всегда избегает реализации compareTo и равнозначен непоследовательно. Если вам нужно заказывать объекты таким образом, который несовместим с равными, используйте компаратор.

Ответ 3

TreeSet:
Плюсы: сортировка, основанная на алгоритме красного/черного дерева, обеспечивает сложность O (log (N)) для операций.
Минусы: значение должно быть либо сравнимым, либо вам необходимо предоставить Comparator в конструкторе. Более того, реализация HashSet обеспечивает лучшую производительность, поскольку обеспечивает сложность ~ O (1).

Ответ 4

Память фрагментов TreeSet и дополнительные накладные расходы памяти. Вы можете посмотреть источники и рассчитать количество дополнительной памяти и количество дополнительных объектов, которые она создает. Конечно, это зависит от природы хранимых объектов, и вы также можете подозревать, что я параноик о памяти:), но лучше не тратить его здесь и там - у вас есть GC, у вас есть промахи в кеше, и все эти вещи - это плащ.

Часто вы можете использовать PriorityQueue вместо TreeSet. И в вашем типичном примере использования лучше просто отсортировать массив строк.

Ответ 5

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