A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dana-乌拉拉 中级黑马   /  2014-11-24 18:10  /  1109 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

三、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());  
  •         }  
  •     }  
  • }  

   


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马