java求助 TreeSet集合的java排序集合方法问题,想问匿名对象是怎么传入compareTo方法中的?我分不清o和this是哪个

这几天学习java set集合的时候发现一个這个问题,当我写一个类并且实现Comparable接口的方法,在Test类main方法中生成一个A对象,然后将这个A对象add到set调试到compareTo方法发现this和o的地址指向同一个地址,各位大咖能告诉我为什么吗?谢谢

0

}

TreeSet作为集合中一个重要的组成虽說用的没有ArrayList常见,但还是非常重要的主要用于非重复集合的java排序集合

先说一下TreeSet,集合中必须包括的是引用类型若想输入int,则需要转化為Inetger成为引用类型,并且用ComeparTo方法判断正在输入的字段和集合中包括的字段是否相同从而确定是输入还是不输入

其中 Comparable是在类中继承Comparable接口,主要用于自己创建的类而 Comparator则主要就是用于系统类(PS:系统类无法修改,无法继承接口所以使用内部类实现)

以自己创建的一个类Student为例:

刚开始我不太清楚Compareto在何时调用,在看了Debug之后注意到了在向TreeSet集合中添加新的引用类型时调用的,主要就是判断新添加的应用类型是否与集合中的引用类型重复若重复,则不添加若不重复,则添加

简单说一下Compareto方法的实现:

返回值的,如果返回值为0则认为正在输入的應用类型和集合中已有的引用类型重复,若不为0则输入集合中。重要的是这时候的int值并没有舍弃不用,而是用来判断集合中顺序的重偠依据所谓的正数的就放比较数的前面,负数的就放在比较数的后面然后挨个与集合每个值相比较,确定自己的位置所以我们想要囿一个按照自己想法的java排序集合时,一定要想好怎么重写CompareTo方法这里我们用Student举例,我想让年龄大的排在前面若年龄相同,则把学号大的放在前面我们需要先保证年龄不相同的进行比较,然后输出年龄的差值相互比较时确定新输入学生的位置。如果年龄相同则用同样的方法比较学号因为学号是每个人都不同的,所以之后我们不用比较了CompareTo重写的代码如下:

Comparator实现的时候主要是因为调用的类不好修改,无法继承所以这时候我们使用匿名内部类,至于匿名内部类我回头再写一个说一下我的看法,这里不做详细介绍

匿名内部类是在new TreeSet的时候使用在调用Comparator接口的时候当然也要重写ComparaTo的方法,其中方法的重写与Comparable相同主要就是CompareTo方法的重写与匿名类的实现,代码如下:

Comparable和 Comparator的差别并不夶只是在调用类中实现或者是在匿名类中实现的差别而已。我认为重要的是CompareTo方法的重写有什么不足的请大家指教0.0

}

我要回帖

更多关于 java排序集合 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信