Comparable接口(了解)
缺省情况下,TreeSet中的元素会采用自然排序(从小到大),此时要求元素对象必须实现java.util.Comparable接口,大多数JDK自带的类都实现了该接口,比如八大包装类和String。
TreeSet会调用元素的compareTo方法来比较元素的大小关系,然后将集合元素按照升序排列。
比较规则,拿当前元素和另一个元素做比较:
+ this > o:返回正整数 1 ,优先级较高
+ this
+ this == o: 返回 0 ,此时认为两个对象为同一个对象。
此时compareTo方法返回0,则认为两个对象是同一个对象,返回正数排前面,返回负数排后面。
如果我们自定义一个类,需要存储到TreeSet中,此时我们需要让该类实现Comparable接口,并覆盖compareTo方法,在该方法编写比较规则。
需求:按照用户的年龄从小到大排序
输出结果:
第一步:第一个节点进去,直接作为根节点,无需比较
第三步:第三个节点进去和第一个节点做比较,返回-1,再和第二个节点做比较。
第五步:第四个节点进去先和will比较,再和stef比较。

Comparator接口(了解)
TreeSet除了默认支持自然排序外,还支持自定义排序,此时需要在构建TreeSet对象时传递java.util.Comparator接口的实现类对象,Comparator表示比较器,里面封装比较规则。
此时compare方法返回0,则认为两个对象是同一个对象,返回正数排前面,返回负数排后面。
需求:根据用户的名字长度排序,如果名字相同按照年龄排序。
输出结果:
小结:HashSet做等值查询效率高,TreeSet做范围查询效率高,在开发中一般使用HashSet就可以了。
若要获得最好的学习效果,需要配合对应教学视频一起学习。需要完整教学视频,请参看https://ke.qq.com/course/272077。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览93565 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!