黑马程序员技术交流社区

标题: 有关TreeSet的问题 [打印本页]

作者: FINE    时间: 2015-1-5 12:53
标题: 有关TreeSet的问题
今天练习TreeSet,可是编译的时候一直报错,代码检查了好几遍,肯定没有问题。后来看毕老师的视频,好像要实现comparator接口,是不是以后使用TreeSet的时候都要实现comparator接口,那什么情况下使用TreeSet??看了视频之后也还是不太明白、
作者: 银离子    时间: 2015-1-5 17:41
TreeSet的底层是二叉数结构的,可以对元素进行排序,需要另写一个类实现comparator接口,把这个类的对象作为匿名内部类传进TreeSet的构造函数中,或者让要存进去的对象实现comparable接口,使用这两个接口时,可以根据需要复写其中的方法。TreeSet是可以排序的,看需要选择了。
希望可以帮到你。
作者: 清诗纪事    时间: 2015-1-5 20:10
comparator接口是用来实现比较性的,如果类本身的比较性不是所需要的,就需要实现此接口,重写compare方法,或者是实现comparable接口,这个接口是用来让本身没有比较性的类,让它的容器具备比较性。
作者: hello_csu    时间: 2015-1-5 20:54
TreeSet是排序树,所以当你要将你对象做排序处理最好使用这种结构。但一定记住要么实现自然排序,要么实现比较器接口。否则是会出问题的。
作者: 只会金克斯    时间: 2015-1-5 22:22
已经有大神回复了。。。。。。
作者: reyzarc    时间: 2015-1-5 22:27
因为TreeSet需要排序才能将数据存入集合。如果你想存入自定义的对象,而又没有进行处理,TreeSet是不知道怎么存,当然会报错。
作者: yxiaohigh    时间: 2015-1-5 23:53
TreeSet集合排序的两种方式: 一,让元素自身具备比较性。 也就是元素需要实现Comparable接口,覆盖compareTo 方法。 这种方式也作为元素的自然排序,也可称为默认排序。二,让容器自身具备比较性,自定义比较器。 需求:当元素自身不具备比较性,或者元素自身具备的比较性不是所需的。 那么这时只能让容器自身具备。 定义一个类实现Comparator 接口,覆盖compare方法。 并将该接口的子类对象作为参数传递给TreeSet集合的构造函数。 当Comparable比较方式,及Comparator比较方式同时存在,以Comparator 比较方式为主。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2