TreeSet:底层数据结构是二叉树。 保证元素唯一性的依据: compareTo方法return 0.TreeSet排序的第一种方式:让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。也种方式也成为元素的自然顺序,或者叫做默认顺序。TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。 TreeSet排序第一种方式: import java.util.*; public class DemoTree{ public static void main(String[]args){ TreeSet ts = new TreeSet(); ts.add(new Person("zhangsan 01",22)); ts.add(new Person("zhangsan 05",20)); ts.add(new Person("zhangsan 02",15)); ts.add(new Person("zhangsan 08",29)); Iterator it = ts.iterator(); while(it.hasNext()){ //这里注意对象的调用 Person p = (Person)it.next(); output(p.getName()+"......."+p.getAge()); } } public static void output(Object obj){ System.out.println(obj); } } //让不具备比较性的类实现Comparable接口从而具备比较性 class Person implements Comparable{ private String name; private int age; Person(String name, int age){ this.name = name; this.age = age; } //对compareTo方法进行覆写 按照我们想要的排序方式排序 public int compareTo(Object obj){ if(!(obj instanceof Person)) throw new RuntimeException("该对象不是学生"); Person s = (Person) obj; if(this.age>s.age) return 1; if(this.age<s.age) return -1; if(this.age == s.age){ return this.name.compareTo(s.name); } return 0; } public String getName(){ return name; } public int getAge(){ return age; } } 注意:要理解Comparable 和Comparator Comparable 这个是可比较的 就是有没有比较性的意思 那理所当然的 有没有比较性 肯定是与另外一个对象相比较了所以需要覆写的方法是 compareTo
Comparator 这个是比较器的意思 也就是说 这个是要传到集合中去的 而且比较器肯定是要有2个对象才能比较了 所以这个需要覆写的是 compare |