zoukankan      html  css  js  c++  java
  • 普林斯顿大学算法课 Algorithm Part I Week 3 比较器 Comparators

    比较器接口(Comparator interface):用可选顺序(alternate order)进行排序

    public interface Comparator<key>
      int compare(Key v, Key w)          //比较元素v和w

    示例:

    Java系统排序(java system sort)

    • 创建Comparator对象(Create Comparator object)
    • 向Array.sort()传递第二参数
    String[] a;  
    ...  
    Arrays.sort();              //自然顺序(natural order)
    ...  
    Arrays.sort(a, String.CASE_INSENSITIVE_ORDER);  
    Arrays.sort(a, Collator.getInstance(new Locale("es"));  
    Arrays.sort(a, new BritishPhoneBookOrder());                   //这三个顺序参数都是被Comparato<String>对象所定义的

    使用Comparator接口进行选择排序(Insertion sort)

    public static void sort(Object[] a, Comparator comparator)
    {
        int N = a.length;
        for (int i = 0; i < N;i++)
            for(int j =  i; j > 0 && less(comparator, a[j], a[j-1]); j--)
                exch(a, j, j-1);        
    }
    
    private static boolean less(Comparator c, Object v, Object w)
    {    return c.compare(v, w) < 0;    }
    
    private static void exch(Object[] a, int i, int j)
    {    Object swap = a[i]; a[i] = a[j]; a[j] = swap;    }

    实现Comparator接口

    • 定义实现 Comparator 接口的类
    • 实现 compare() 方法
    public class Student 
    {  
        public static final Comparator<Student> BY_NAME = new ByName();  
        public static final Comparator<Student> BY_SECTION = new BySection();  
        private final String name;  
        private final int section;  
        ...
        private static class ByName implements Comparator<Student>                        //ByName类实现了Comparator接口
        {
            public int compare(Student v, Student w)  
            {  return v.name.compareTo(w.name);  }  
        }  
       
        private static class BySection implements Comparator<Student>                     //BySection实现了Comparator接口
        {  
            public int compare(Student v, Student w)
            {  return v.section - w.section;  }  
        }  
    }      

    真正的比较在compare的重载方法中。

    Comparator接口是一层壳,是把compare()方法包装起来的包装纸。

    compareTo()方法是compare()的具体实现

  • 相关阅读:
    分布式配置 SSH 免密登陆
    转载--宏观认识大数据圈
    转载--存储是怎样炼成的
    转载--关于hdfs
    绕不开的hadoop
    sqoop 使用
    Excel VBA解读(54):排序——Sort方法
    MSSQL附加数据库时提示以下错误: 无法打开物理文件“***.mdf”。操作系统错误 5:“5(拒绝访问。)”。 (Microsoft SQL Server,错误: 5120)
    Delphi Code Editor 之 编辑器选项
    解决StrToDateTime()不是有效日期类型的问题
  • 原文地址:https://www.cnblogs.com/Jimtastic/p/4003566.html
Copyright © 2011-2022 走看看