实现Comparator方式排序一TreeSet集合

来源:互联网 发布:centos nginx php 编辑:程序博客网 时间:2024/05/01 04:42
TreeSet的第一种排序方式,让元素自身具备比较性。
元素需要实现comparable接口,覆写compareTo方法。

TressSer第二种排序方式
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性,就定义了比较器。
定义一个类实现comparator 覆写compare方法。
          TreeSet(Comparator<? super E> comparator) 
               构造一个新的空 TreeSet,它根据指定比较器进行排序



使用集合比较排序。
使用Comparator 的compare方法比较,
compare(T  o1, T o2)
o1是要添加的元素, o2是集合中现有的元素。

根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

如果两种方式都具备时,以比较器(comparator)为主


需求:
用姓名排序,姓名相同再比较年龄排序

import java.util.*;/**/class TreeSetDemo  {      public static void main(String [] args)      {          TreeSet ts=new TreeSet(new Mycompare());          ts.add(new Student("lisi09",40));          ts.add(new Student("lisi02",22));          ts.add(new Student("lisi007",20));          ts.add(new Student("lisi09",30));                Iterator it=ts.iterator();            while(it.hasNext())          {               Student s=(Student)it.next();              System.out.println(s.getName()+"...."+s.getAge());          }      }  }  class Mycompare implements Comparator{/*Mycompare上帝是Object已经继承了equals不用再覆盖了*/public int compare(Object o1,Object o2){Student s1=(Student)o1;Student s2=(Student)o2; int a=s1.getName().compareTo(s2.getName());//比较字符串,主要条件相同比较次要条件 if(a==0)return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge())); return a;}}  class Student implements Comparable  {      private String name;      private int age;      Student(String name ,int age)      {          this.name=name;          this.age=age;      }      public int compareTo(Object obj)                              {          if(!(obj instanceof Student))              throw new RuntimeException("不属于stduent类");            Student s=(Student)obj;          if(this.age > s.age)              return 1;          if(this.age ==s.age)          {              return this.name.compareTo(s.getName());          }            return -1;      }      public String getName()      {          return name;      }      public int getAge()      {           return age;      }  }








0 0
原创粉丝点击