6.2.2 Comparator接口

Posted vneo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.2.2 Comparator接口相关的知识,希望对你有一定的参考价值。

对一个对象数组排序(Array.sort()),前提是这些对象是实现了Comparable接口的类的实例

可以对一个字符串数组进行排序
因为String类实现了Comparable<String>
而且String.compareTo方法可以按字典顺序比较字符串

假设我们希望按长度递增的顺序 对字符串进行排序,而不是按字典顺序

Array.sort()方法还有第二个版本:
有一个数组和一个比较器(comparator)作为参数

比较器是实现了Comparator接口的实例
Comparator接口

public interface Comparator<T>
{
      int compare(T first,T second);
}

要按长度比较字符串, 可以如下定义一个实现Comparator<String>接口的类(比较器)

class LengthComparator implements Comparator<String>
{
    public int compare(String first,String second){
        return first.length()-second.length();
    }
}

具体完成比较时,需要建立一个实例

Comparator<String> comp = new LengthComparator();
if(comp.compare(word[i],word[j]) > 0)....

将这个调用与word[i].compareTo(word[j])作比较:
compare方法要在比较器对象上调用,而不是在字符串本身上调用

按长度递增的顺序 对字符串进行排序
需要为Array.sort()方法传入一个LengthComparator对象

String[] friends = {"Peter","Paul","Mary"};
Array.sort(friends, new LengthComparator());

使用Lambda表达式 可以更容易的使用Comparator







以上是关于6.2.2 Comparator接口的主要内容,如果未能解决你的问题,请参考以下文章

java排序问题,comparator接口,求高手

Java集合框架 Set接口实现类--TreeSet补充: Comparator接口

java图中代码改用Lambda表达式实现Comparator接口?

错误记录Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )

Comparable接口与Comparator接口的比较————Comparator接口详解

集合排序Comparator和Comparable