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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 晚上没饭吃 中级黑马   /  2015-8-7 22:16  /  507 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

特点:区别于其他集合的特点  可以对集合中的数据进行自然排序
TreeSet 底层结构:二叉树形结构

那么,Treeset是如何存储数据的呢?
A:把第一个存储进去的数据作为根节点
B:把数据依次和根节点进行比较
比较得到正数往右放
比较得到负数向左放
如果比较得到相等的数,把后来的数据扔掉

从二叉树结构中取数据的内存规则
原则:从每个节点的左边开始,遵循原则  左 中 右
如果想添加自定义排序,会报ClasscaseException异常,因为TreeSet不知道要怎么排序
解决方法


A:自然排序 让对象所属的类去实现Comparable接口。不建议使用,直接修改类中的数据出现未知问题
            并重写接口中的compareTo方法。
public int compareTo( Studetn s )
{
     //需求是比较年龄
     int num = this.age - s.age ;
     //由于对象有多个成员变量,你不能根据其中的某一个决定其他的。
     //当某一个相同的时候,你还需要判断其他的是不是也是相同的。
     int num2 = ( num == 0 ) ? ( this.name.compareTo( s.name ) ) : num ;
     return num2;
}

B:定义集合的时候给定参数new Comparator()这接口,实现匿名类部类。建议使用
TreeSet<Student>  tree=new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if(s1.getAge()>s2.getAge()){
return 1;
}else if(s1.getAge()==s2.getAge()){
return s1.getName().compareTo(s2.getName());
}else {
return -1;
}
}
});

2 个回复

倒序浏览
直接不错!!!!!
回复 使用道具 举报
不错 赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马