A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马胡林 黑马帝   /  2012-4-1 12:44  /  1936 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set 不是无序的么,为什么  TreeSet 可以有序,为什么要定义一个比较器啊,实现Comparable  ,Comparator.里面方法都有什么特点。看视频,我都湖涂了...

2 个回复

倒序浏览
set是无序的,可以这样理解,它不会按照你new对象的先后顺序排列到集合中,没有先进先出或先进后出的性质,因为它没有角标,
当你实现了Comparable,就具备了可比性,然后覆盖Comparable中的compareTo方法,这个方法会返回一个整数,大于0,小于0,和等于0,
每次new对象的时候就会自动调用这个比较方法compareTo,把新new的对象和已经存在的对象1对多的逐步比较,根据比较的的结果确定
自己存放的位置,比较的原则就是你覆盖compareTo时的自定义比较内容,如果你按名字比较,结果就会按名字的首字母自然排序,如果你按年龄比较就
会按年龄的大小进行排序.

视屏多看几遍就明白了 , 要 悟 .
回复 使用道具 举报
TreeSet:用于给Set集合中的元素按照指定的顺序进行排序。底层是二叉树数据结构。
如何保证元素唯一性呢?
就是通过元素对象的比较方法返回值来确定的。如果为0,视两个元素为相同元素,不存。
                               
排序方式一:
让元素自身具备比较功能,就是强制让元素去实现Comparable接口,覆盖compareTo方法。
这时元素具备的自然排序。
                               
可是如果元素自身不具备比较功能,获取具备的比较功能不是所需要的。
这时排序方式一就用不了了。
排序方式二:
让集合自身具备比较功能,需要定义比较器,其实就是将实现了Comparator接口的子类对象作为
参数传递给TreeSet集合的构造函数。让TreeSet集合一创建就具备了比较功能。
该子类必须要覆盖compare方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马