CompareTo( Object o )
compareTo默认被当前对象调用,比较属性时可以用this.调用,而这个参数 Object o 代表与当前对象进行比较的对象。当向Set集合中新添加一个元素的时候,这个元素会和之前集合里面的所有元素进行比较,从而选择插入的位置。
compareTo方法的返回值是int类型,例如,当” this.属性 - o.属性 “
返回一个正数,表示this比o大,把this排在o后面。
返回负数相反。
返回0,表示无所谓。
以下的例子,把Teacher类的对象先按照id排序,又按照名字排序,又按照年龄排序。
.hashCode()方法会把任意类型的数据通过Java中定义好的方法转为哈希码,这样就可以进行数学性的比较了。
import java.util.Comparator;
import java.util.TreeSet;
//设计Teacher类,包含属性id,name,age,创建Teacher对象,将对象保存在TreeSet集合中并且排序,
public class Teacher implements Comparable<Teacher>{
int id;
String name;
int age;
public Teacher(int a, String b, int c){
id = a;
name = b;
age = c;
}
@Override
public int compareTo(Teacher s) { //重写CompareTo
return this.id == s.id? (this.name.equals(s.name)? ( this.age == s.age? -1 : this.age - s.age)
: this.name.hashCode() - s.name.hashCode()) : this.id - s.id; //设置比较规则
}
@Override
public String toString() {
return id+" " + name+" " + age;
}
public static void main(String[] args) {
TreeSet<Teacher> ts = new TreeSet<>(); //创建集合
Teacher t1 = new Teacher(12566,"悟空",55); //创建五个对象
Teacher t2 = new Teacher(12566,"JOJO",55);
Teacher t3 = new Teacher(17666,"Dio",22);
Teacher t4 = new Teacher(12566,"悟空",45);
Teacher t5 = new Teacher(16676,"悟空",45);
ts.add(t1); //添加对象
ts.add(t2);
ts.add(t3);
ts.add(t4);
ts.add(t5);
System.out.println(ts); //输出集合
}
}
结果:
[12566 悟空 45, 12566 悟空 55, 12566 JOJO 55, 16676 悟空 45, 17666 Dio 22]