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的一个缺陷是它以意想不到的方式实现了Set接口.如果TreeSet包含对象a,那么如果a.compareTo(b)返回0,则对象b被视为集合的一部分,即使a.equals(b)为false,因此如果compareTo和equals没有以一致的方式实现,你是一个糟糕的旅程.
当方法返回Set时,这尤其是一个问题,并且您不知道该实现是TreeSet还是HashSet.
这里要学习的教训是,始终避免实现compareTo并且等于不一致.如果需要以与equals不一致的方式对对象进行排序,请使用Comparator.