TreeSet


TreeSet

TreeSet和TreeMap一样,采用红黑树的存储结构

//按照姓名从大到小排列,年龄从小到大排列
@Override
public int compareTo(Object o) {
   if(o instanceof Person){
       Person person = (Person)o;
       int compare = -this.name.compareTo(person.name);
       if (compare==0){
           return Integer.compare(this.age, person.age);
      }else {
           return compare;
      }
  }else {
       throw new RuntimeException("输入的数据类型不正确");
  }
}
public class TreeSetTest {
?
   /*
   1.向TreeSet中添加的数据,要求是相同类的对象
   2.两种排序方式:自然排序(实现Comparable接口) 和 定制排序(Comparator)
?
   3.自然排序中,比较两个对象是否相同的标准为:compareTo()返回0,不再是equals()
   3.定制排序中,比较两个对象是否相同的标准为:compare()返回0,不再是equals()
    */
   @Test
   public void test1(){
       TreeSet set = new TreeSet();
       //失败:不能添加不同类的对象
//       set.add(123);
//       set.add(456);
//       set.add("hello");
//       set.add(new Person("Tom", 12));
?
       //类型一
//       set.add(45);
//       set.add(-45);
//       set.add(1);
//       set.add(100);
//       set.add(0);
?
       //类型二
       set.add(new Person("Tom", 12));
       set.add(new Person("Jack", 50));
       set.add(new Person("Jim", 5));
       set.add(new Person("Arm", 35));
       set.add(new Person("Mike", 18));
       set.add(new Person("Mike", 25));
?
       Iterator iterator = set.iterator();
       while(iterator.hasNext()){
           System.out.println(iterator.next());
      }
  }
?
   @Test
   public void test2(){
       Comparator com = new Comparator(){
?
           //按照年龄从小到大排序
           @Override
           public int compare(Object o1, Object o2) {
               if(o1 instanceof Person && o2 instanceof Person){
                   Person p1 = (Person) o1;
                   Person p2 = (Person) o2;
                   return Integer.compare(p1.getAge(), p2.getAge());
              }else {
                   throw new RuntimeException("输入的数据类型不匹配");
              }
          }
      };
?
       TreeSet set = new TreeSet(com);
?
       set.add(new Person("Tom", 12));
       set.add(new Person("Jack", 50));
       set.add(new Person("Jim", 5));
       set.add(new Person("Marry", 5));
       set.add(new Person("Arm", 35));
       set.add(new Person("Mike", 18));
       set.add(new Person("Mike", 25));
?
       Iterator iterator = set.iterator();
       while(iterator.hasNext()){
           System.out.println(iterator.next());
      }
  }
}