博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
普林斯顿大学算法课 Algorithm Part I Week 3 比较器 Comparators
阅读量:4546 次
发布时间:2019-06-08

本文共 1906 字,大约阅读时间需要 6 分钟。

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

public interface Comparator
  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
对象所定义的

 

使用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
BY_NAME = new ByName(); public static final Comparator
BY_SECTION = new BySection(); private final String name; private final int section; ... private static class ByName implements Comparator
//ByName类实现了Comparator接口 { public int compare(Student v, Student w) { return v.name.compareTo(w.name); } } private static class BySection implements Comparator
//BySection实现了Comparator接口 { public int compare(Student v, Student w) { return v.section - w.section; } } }

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

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

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

转载于:https://www.cnblogs.com/Jimtastic/p/4003566.html

你可能感兴趣的文章
vc6
查看>>
[机器学习实战] AdaBoost集成算法及非均衡分类问题
查看>>
Flask 【第八篇】flask-session组件
查看>>
7. spark使用中的优化
查看>>
git status 不可全信
查看>>
cocos2d addChild 方法会自动将 child 的引用计数加1
查看>>
poj 2676 如何填满九宫格
查看>>
sublime text3中设置Emmet输入标签自动闭合
查看>>
git log --author详解,这个是个模糊匹配
查看>>
mysql 创建merge表方便查询
查看>>
测试你的浏览器是否支持WebGL(Does My Browser Support WebGL)
查看>>
PAT Basic 1036
查看>>
券商VIP交易通道
查看>>
TCP/IP、UDP、HTTP、SPDY等的一些解释说明
查看>>
第38章:MongoDB-集群--Replica Sets(副本集)---多机的搭建
查看>>
Python之模块和包
查看>>
省选专练【POI2015】Pieczęć
查看>>
win7下的PHP+IIS配置,找不到php5isapi.dll的问题,版本5.4.9
查看>>
thinkphp+redis实现秒杀功能
查看>>
Java 基础面试题
查看>>