特点:区别于其他集合的特点 可以对集合中的数据进行自然排序
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;
}
}
});
|
|