从
JavaNotes:
> a.compareTo(b):
可比较的接口:比较值并返回一个int,它告诉这些值是否小于,等于或大于。
如果你的类对象有一个自然的顺序,实现Comparable< T>接口并定义此方法。具有自然排序的所有Java类实现可比较的< T> – 示例:String,wrapper classes,BigInteger
> compare(a,b):
比较器接口:比较两个对象的值。这被实现为比较器< T>的一部分。接口,典型的用法是定义一个或多个实现这个的小实用程序类,传递给诸如sort()之类的方法,或者通过排序数据结构(如TreeMap和TreeSet)来使用。您可能需要为以下内容创建一个Comparator对象:
>多重比较。提供几种不同的方法来排序东西。例如,您可能希望按名称,ID,年龄,高度对Person类进行排序…您可以为每个类定义一个Comparator,以传递给sort()方法。
>系统类为您无法控制的类提供比较方法。例如,您可以定义一个比较字符串,比较它们的长度。
>策略模式要实现策略模式,您希望将算法表示为可作为参数传递的对象,保存在数据结构等中。
如果你的类对象有一个自然的排序顺序,你可能不需要compare()。
可比
类似对象能够将自身与另一个对象进行比较。
比较器
比较器对象能够比较两个不同的对象。类不是比较它的实例,而是一些其他类的实例。
用例上下文:
可比较的接口
equals方法和==和!=运算符测试等于/不等式,但不提供测试相对值的方法。
一些类(例如,String和具有自然排序的其他类)实现可比较的< T>接口,它定义了compareTo()方法。
您将要实现可比较的< T>在你的类中,如果你想使用它与Collections.sort()或Arrays.sort()方法。
定义比较器对象
您可以创建比较器以对任何类进行任意排序。
例如,String类定义了CASE_INSENSITIVE_ORDER comparator。
两种方法之间的区别可以与以下概念相关:
订购集合:
当一个Collection被排序时,它意味着你可以在一个特定的(非随机)顺序中迭代集合(一个Hashtable没有排序)。
> Comparable是在实现中,从界面不可见,所以当你排序你不真正知道会发生什么。>比较器让您放心,排序将被明确定义。