美文网首页
Java 集合排序Comparable与Comparator

Java 集合排序Comparable与Comparator

作者: 枫叶栈 | 来源:发表于2018-12-21 10:55 被阅读0次

    一、用法

    1. Comparable用法

    源码如下:

    public interface Comparable<T> {
       //a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object. 
       负数、0、正数 分别代表该对象 小于、等于 大于 比较对象
       public int compareTo(T o);
    }
    
    

    创建一个学生类如下:

    public class StudentModel implements Comparable<StudentModel> {
      private int num;//编号
      private int age;//年龄
      private String name;//姓名
    
      public StudentModel(int num, int age, String name) {
          this.num = num;
          this.age = age;
          this.name = name;
      }
    
      //get set方法
      ...
      //将自身与o做对比 自身在前将是升序排序 反之降序
      @Override
      public int compareTo(StudentModel o) {
          return num -o.num ;
      }
    
      @Override
      public String toString() {
          return name+",num="+num+",age="+age;
      }
    }
    
    

    测试代码:

          List<StudentModel> list = new ArrayList<>();
          list.add(new StudentModel(1,10,"张三"));
          list.add(new StudentModel(5,9,"李四"));
          list.add(new StudentModel(3,12,"王五"));
          
          Collections.sort(list);
          for (StudentModel item:list) {
              System.out.println(item);
          }
    

    测试结果:根据编号升序排序

    张三,num=1,age=10
    王五,num=3,age=12
    李四,num=5,age=9
    

    2. Comparator用法

    如果需求变更,希望按照学生age排序,则上述代码需要改动,这时候我们可以使用Comparator来满足需求,测试代码如下:

        Collections.sort(list, new Comparator<StudentModel>() {
              @Override
              public int compare(StudentModel o1, StudentModel o2) {
                  return o1.getAge()-o2.getAge();
              }
          });
    
          for (StudentModel item:list) {
              System.out.println(item);
          }
    
    

    测试结果如下:

    李四,num=5,age=9
    张三,num=1,age=10
    王五,num=3,age=12
    

    二、总结

    1. Comparable与Comparator都可以实现排序,都是接口类型;
    2. Comparable放在实体类中,定意一种排序,当排序需求变更,无法满足;
    3. Comparator 可以理解为对Comparable的扩展,可以对同一个类定义多个排序规则,使用更加灵活。

    相关文章

      网友评论

          本文标题:Java 集合排序Comparable与Comparator

          本文链接:https://www.haomeiwen.com/subject/bkcmkqtx.html