| 三、TreeSet 1、特点         a、底层的数据结构为二叉树结构(红黑树结构)         b)可对Set集合中的元素进行排序,是因为:TreeSet类实现了Comparable接口,该接口强制让增加到集合中的对象进行了比较,需要复写compareTo方法,才能让对象按指定需求(如人的年龄大小比较等)进行排序,并加入集合。         java中的很多类都具备比较性,其实就是实现了Comparable接口。 注意:排序时,当主要条件相同时,按次要条件排序。 二叉树示意图 ![]()
         c、保证数据的唯一性的依据:通过compareTo方法的返回值,是正整数、负整数或零,则两个对象较大、较小或相同。相等时则不会存入。 2、Tree排序的两种方式         1)第一种排序方式:自然排序         让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。这种方式也被称为元素的自然顺序,或者叫做默认顺序。 示例:[java] view plaincopy 
 
 
 import java.util.*;  //学生类  class Student implements Comparable  {      private String name;      private int age;      Student(String name,int age)      {          this.name=name;          this.age=age;      }      public String getName()      {          return name;      }        public int getAge()      {          return age;      }      //复写hashCode以便HashSet集合调用      public int hashCode()      {          return name.hashCode()+age;      }      //复写equals以便HashSet集合和集合中一些比较方法调用      public boolean equals(Object obj)      {          if(!(obj instanceof Student))              throw new RuntimeException();          Student s = (Student)obj;          return this.name.equals(s.name)&&this.age==s.age;      }      //复写compareTo以便TreeSet集合调用      public int compareTo(Object obj)      {          Student s=(Student)obj;          if(this.age==s.age)              return this.name.compareTo(s.name);          return this.age-s.age;          //return new Integer(this.age).compareTo(new Integer(s.age));       }  }    class  TreeSetTest  {      public static void main(String[] args)       {          TreeSet<Student> t=new TreeSet<Student>();          t.add(new Student("wo1",12));          t.add(new Student("wosj",2));          t.add(new Student("wo1sdj",12));          t.add(new Student("wo6sd",12));          t.add(new Student("wo",22));                      for (Iterator<Student> it=t.iterator(); it.hasNext(); )          {              Student s=it.next();              System.out.println(s.getName()+"....."+s.getAge());          }      }  }  
 
     
 |