TreeSet的优点和缺点是什么?

Rif*_*ifk 19 java treeset data-structures

只是想知道TreeSet的优点和缺点是什么,如果有人能告诉我的话?谢谢!

Rub*_*bee 24

其中一个Collection类.它允许您通过键或按键顺序访问集合中的元素.它比ArrayList或HashMap有更多的开销.当您不需要顺序访问时使用HashSet,只需按键查找.使用ArrayList并使用Arrays.如果您只想按顺序排列元素,请排序.TreeSet始终按顺序保存元素.使用ArrayList,您只需在需要时进行排序.使用TreeSet时,密钥必须嵌入到您在集合中存储的对象中.通常你可能有TreeSet of Strings.那么你所能做的就是告诉给定的String是否在Set中.它不会像Treemap那样找到你关联的对象.使用TreeMap,键和它们关联的对象是分开的.

TreeSet和它的兄弟TreeMap奇怪地与表示树无关.在内部,他们使用树组织为您提供按字母顺序排序的Set/Map,但您无法控制父母和孩子之间的链接.

内部TreeSet使用红黑树.无需预先分配数据即可获得均衡的树.另一方面,如果数据被排序(升序或降序),它将不会像其他类型的树一样受到伤害.

如果您不提供Comparator来定义所需的顺序,TreeSet需要在item类上使用Comparable实现来定义自然顺序.

  • 典型用例:获取文本,从TreeSet <String>中删除此文本中的所有单词,迭代器提供按字母顺序排序的单词索引(没有重复项). (4认同)

Buh*_*uhb 9

缺点:TreeSet的一个缺陷是它以意想不到的方式实现了Set接口.如果TreeSet包含对象a,那么如果a.compareTo(b)返回0,则对象b被视为集合的一部分,即使a.equals(b)为false,因此如果compareTo和equals没有以一致的方式实现,你是一个糟糕的旅程.

当方法返回Set时,这尤其是一个问题,并且您不知道该实现是TreeSet还是HashSet.

这里要学习的教训是,始终避免实现compareTo并且等于不一致.如果需要以与equals不一致的方式对对象进行排序,请使用Comparator.

  • 也许你想说“如果 a.compareTo(b) 返回零”? (2认同)
  • 哇。对 4 年前的帖子的建设性反馈。谢谢,我已经修好了。 (2认同)