Java中TreeSet类Demo

来源:互联网 发布:安卓高清电视直播软件 编辑:程序博客网 时间:2024/06/06 20:23
package day17_Set2;import java.util.Comparator;import java.util.TreeSet;/* * 需求:请按照姓名的长度排序 *  * TreeSet集合保证元素和唯一性的原理 * 唯一性:是根据比较的返回值是否是0决定的 * 排序: *      A:自然排序(元素具备比较性) *          让元素所属的类实现自然排序的接口Comparable *      B:比较器排序(集合具备比较性) *          让集合的构造方法接收一个比较器接口的子类对象Comparator * */public class TreeSetDemo3 {    public static void main(String[] args) {        // TODO Auto-generated method stub        // 创建集合对象        //比较器排序        TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {            //如果一个方法的参数是接口,那么真正要的是接口的实现类的对象            //而匿名类就可以实现这个东西            @Override            public int compare(Student o1, Student o2) {                // TODO Auto-generated method stub                //姓名长度                int num=o1.getName().length()-o2.getName().length();                //姓名内容                int num2=num==0?o1.getName().compareTo(o2.getName()):num;                //年龄                int num3=num2==0?o1.getAge()-o2.getAge():num2;                return num3;            }        });        // 创建元素        Student s1 = new Student("linqingxia", 27);        Student s2 = new Student("zhangguorong", 29);        Student s3 = new Student("wanglihong", 23);        Student s4 = new Student("linqingxia", 27);        Student s5 = new Student("liushishi", 22);        Student s6 = new Student("wuqilong", 40);        Student s7 = new Student("fengqingy", 22);        Student s8 = new Student("linqingxia", 29);        // 添加元素        ts.add(s1);        ts.add(s2);        ts.add(s3);        ts.add(s4);        ts.add(s5);        ts.add(s6);        ts.add(s7);        ts.add(s8);        // 遍历        for (Student s : ts) {            System.out.println(s.getName() + "--" + s.getAge());        }    }}

学生类:

package day17_Set2;import java.util.Comparator;/* * 如果一个类的元素想要进行自然排序,就必须实现自然排序接口 *  * */public class Student implements Comparable<Student>{    private String name;    private int age;    public Student() {        super();        // TODO Auto-generated constructor stub    }    public Student(String name, int age) {        super();        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + age;        result = prime * result + ((name == null) ? 0 : name.hashCode());        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        Student other = (Student) obj;        if (age != other.age)            return false;        if (name == null) {            if (other.name != null)                return false;        } else if (!name.equals(other.name))            return false;        return true;    }    //重写比较类    @Override    public int compareTo(Student o) {        //按年龄大小排序//      // TODO Auto-generated method stub//      //return 0;//      //return 1;//      //      //这里返回数目,其实应该根据我的排序规则来做//      //按照年龄排序,主要条件//      int num=this.age-o.age;//      //次要条件//      //年龄相同的时候,还得去看姓名是否也相同//      //如果年龄和姓名都相同,才是同一个元素//      int num2=num==0?this.name.compareTo(o.name):num;//      return num2;        //按姓名长度比较        //主要条件        int num=this.name.length()-o.name.length();        //姓名长度相同,不代表姓名的内容也相同        int num2=num==0?this.name.compareTo(o.name):num;        //姓名的长度和内容相同,不代表年龄相同,所以还得判断年龄        int num3=num2==0?this.age-o.age:num2;        return num3;    }//  @Override//  public int hashCode() {//      // TODO Auto-generated method stub//      //      return this.name.hashCode()+this.age*10;//  }//  @Override//  public boolean equals(Object obj) {//      // TODO Auto-generated method stub//      if(this==obj){//          return true;//      }//      if(!(obj instanceof Student)){//          return false;//      }//      Student s=(Student)obj;//      return this.name.equals(s.name)&&this.age==s.age;//  }}
原创粉丝点击