黑马程序员技术交流社区

标题: TreeSet集合 [打印本页]

作者: 晚上没饭吃    时间: 2015-8-7 22:16
标题: TreeSet集合
特点:区别于其他集合的特点  可以对集合中的数据进行自然排序
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;
}
}
});

作者: 欧杰    时间: 2015-8-7 22:39
直接不错!!!!!
作者: wx_HWRW5aF7    时间: 2015-8-7 22:45
不错 赞一个




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