原创

Java中java.util.Comparator接口使用方式说明

java.util.Comparator是比较器接口,如果我们需要控制某个类的次序并且该类本身不支持排序,那么就可以建立一个类比较器来进行排序,实现方式很简单只需要实现java.util.Comparator接口。


java.util.Comparator接口只包括两个函数,它的源码如下:

package java.util;
public interface Comparator {
    int compare(T o1, T o2);
    boolean equals(Object obj);
}

1) 若一个类要实现java.util.Comparator接口:它一定要实现int compare(T o1, T o2) 函数,而另一个可以不实现boolean equals(Object obj) 函数

2)int compare(T o1, T o2) 是比较o1和o2的大小

如果返回值为负数意味着o1比o2小,否则返回为零意味着o1等于o2,返回为正数意味着o1大于o2


下面我简单举例演示比较集合内对象数字大小,其中实体类,具体代码如下:

package com.yoodb;
/**
 * 素文宅 www.yoodb.com
 */
public class Number {
private int a;
private int b;
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}


实现java.util.Comparator接口具体代码如下:

package com.yoodb;
import java.util.Comparator;
/**
 * 素文宅 www.yoodb.com
 */
public class NumberComparator implements Comparator{
@Override
public int compare(Number o1, Number o2) {
// TODO Auto-generated method stub
System.out.println("a1->" + o1.getA() +"     "+ "a2->" + o2.getA());
System.out.println("结果值---->" + (o2.getA() - o1.getA()));
return o2.getA() - o1.getA();
}
}


本地应用测试,具体代码如下:

package com.yoodb;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
 * 素文宅 www.yoodb.com
 */
public class NumberTest {
public static void main(String[] args) {
List list = new ArrayList();
Number nb = new Number();
nb.setA(6);
nb.setB(1);
list.add(nb);
nb = new Number();
nb.setA(7);
nb.setB(3);
list.add(nb);
NumberComparator ct = new NumberComparator();
Collections.sort(list, ct);
if(list != null && list.size() > 0){
            for(Number nr : list){
               System.out.println("a->" + nr.getA() +"     "+ "b->" + nr.getB());
            }
        }
}
}


运行结果如下:

a1->7     a2->6
结果值---->-1
a->7     b->3
a->6     b->1


java.util.Comparator接口中降序升序,可以这样理解:

假如A的值大于B,你返回1,此时调用Collections.sort()函数就是升序;假如A的值大于B,你返回-1,此时调用Collections.sort()函数就是降序。

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

  1. #1

    yoodb (2017/04/26 12:00:00)回复
    不错的网站主题,看着相当舒服,确实不错!

分享:

支付宝

微信