zoukankan      html  css  js  c++  java
  • 2017.5.16 comparator和comparable的比较及使用

    参考来自:

    http://blog.csdn.net/lifuxiangcaohui/article/details/41543347

    http://www.cnblogs.com/liuyuanyuanGOGO/p/java_collections.html

    1.comparable的使用示例

    可以看到,实现Comparable接口后,必须要重写compareTo方法。这样就使得我们自定义的类StudentDTO具备比较功能。当把StudentDTO放入集合中时,就可以对集合内的参数进行排序。

     1 public class StudentDTO implements Comparable{
     3   private String name;
     4   private int age;
     5 
     6     //setter和getter略
     7 
     8    @Override
     9     public int compareTo(Object o){
    10        StudentDTO sdto = (StudentDTO)o;
    11        int otherAge = sdto.getAge();
    12        //注意这里的compareTo取决于参数类型,比如这里是int的比较
    13        return this.age.compareTo(otherAge);
    14     }
    15 }
     1 public static void main(String[] args){
     3       List<StudentDTO> studentList = new ArrayList();
     4 
     5       StudentDTO s1 = new StudentDTO ();
     6       s.setName("yuanyuan");
     7       s.setAge(22);
     8       studentList.add(s1);
     9 
    10       StudentDTO s1 = new StudentDTO ();
    11       s.setName("lily");
    12       s.setAge(23);
    13       studentList.add(s2);
    14 
    15       Collections.sort(studentList);  //按照age升序 22,23,
    16       Collections.reverse(studentList);  //按照age降序 23,22   
    17 }

    2.comparator的使用示例

     1 class MyCompartor implements Comparator{
     3      @Override
     4      public int compare(Object o1, Object o2){
     6            StudentDTO sdto1= (StudentDTO)o1;
     7            StudentDTO sdto2= (StudentDTO)o2;
     8            return sdto1.getAge.compareTo(stdo2.getAge());
     9     }
    10 }
     1 public static void main(String[] args){
     3       List<StudentDTO> studentList = new ArrayList();
     4       StudentDTO s1 = new StudentDTO ();
     5       s1.setName("yuanyuan");
     6       s1.setAge(22);
     7       studentList.add(s1);
     8 
     9       StudentDTO s2 = new StudentDTO ();
    10       s.2setName("lily");
    11       s2.setAge(23);
    12       studentList.add(s2);
    13 
    14       MyComparetor mc = new MyComparetor();
    15       Collections.sort(studentList,mc);     //按照age升序 22,23,
    16       Collections.reverse(studentList,mc);    //按照age降序 23,22   
    17 }

    还有一种更常用的写法:

     1 //前面略
     2 Collections.sort(studentList, new Comparator<StudentDTO>(){  
     3             /*  
     4              * int compare(Student o1, Student o2) 返回一个基本类型的整型,  
     5              * 返回负数表示:o1 小于o2,  
     6              * 返回0 表示:o1和o2相等,  
     7              * 返回正数表示:o1大于o2。  
     8              */  
     9             public int compare(StudentDTO o1, StudentDTO o2) {  
    11                 //按照学生的年龄进行升序排列  18                 return o1.getAge().compareTo(o2.getAge());  
    19             }  
    20         }); 

    3.CompareTo方法

    由前面可知,当自定义类StudentDTO实现comparable接口后,重写了方法compareTo()具备了比较功能。

    而java中的基本类都具备比较功能。比如String类:

    1 public final class String implements java.io.Serializable, Comparable<String>, CharSequence
     1 public int compareTo(String anotherString) {
     2         int len1 = value.length;
     3         int len2 = anotherString.value.length;
     4         int lim = Math.min(len1, len2);
     5         char v1[] = value;
     6         char v2[] = anotherString.value;
     7 
     8         int k = 0;
     9         while (k < lim) {
    10             char c1 = v1[k];
    11             char c2 = v2[k];
    12             if (c1 != c2) {
    13                 return c1 - c2;
    14             }
    15             k++;
    16         }
    17         return len1 - len2;
    18     }

    所以当使用Collection.sort(list<String>())时,可以直接用。而对于自定义的类,就需要用上述两种方法中的一种来完成排序。

    其次,Collections.sort()、Arrays.sort()是类似的方法。不过针对不同的类型。

    并且方法里的参数可以有locale,因此就可以对中文排序等。

  • 相关阅读:
    Unity SceneManager 对场景的操作
    Unity [Tooltip("")]
    Unity WWW下载图片并保存到Unity的Assets下
    C# 集合
    C# 枚举与switch用法
    C# String.Format方法
    C# Thread类 线程优先级
    Unity Gizmos可视化辅助工具
    anacanda
    异常和错误
  • 原文地址:https://www.cnblogs.com/lyh421/p/6860069.html
Copyright © 2011-2022 走看看