TreeSet保证元素唯一性的依据是compareTo方法return 0. TreeSet的第一种排序方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法。该顺序也被称为元素的自然顺序或者默认顺序。如下示例:当返回0时,代表两个对象相同,当存入的时候第二个对象就不会存入(当然,这个方法中还要判读次要条件的,一般也都要判断一下次要条件)。当返回的不是0时,则会根据num的正负值来将他们排序。 - public int compareTo(Student s) {
- int num = new Integer(this.age).compareTo(new Integer(s.age));
- if(num == 0)
- return this.name.compareTo(s.name);
- return num;
- }
复制代码
TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需的时,这时就需要让集合自身具备比较性。 实现方式:在集合初始化时,就让其具备比较性。即定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。 这种方式中的compare方法也还是在调用compareTo方法在比较,再根据其返回值来排序。 - class MyCompare implements Comparator//定义一个比较器,让其实现Comparator接口;
- {
- public int compare(Object o1,Object o2)//覆盖Comparator中的compare方法,
- { //让其按照我们自定义的放将对象进行比较;
- Student s1 = (Student)o1;
- Student s2 = (Student)o2;
- int num = s1.getName().compareTo(s2.getName());
- if(num == 0) //当名字相同时,再继续比较年龄,按年龄大小进行排序;
- return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
- return num; //将学生的年龄进行封装,再做比较;
- }
- }
复制代码
|