比较器

最近在看TreeMap的源码,发现了有一个构造方法里面有个参数Comparator,发现是一个接口,用于比较对象大小的比较器,在类外部使用,与Comparable接口相对应,Comparable接口在类内部使用,类直接实现该接口。
Java已经给我们提供了很多用Comparable接口或Comparator接口的实现来排序的容器,比如最常用的数组,以及TreeMap等。
我们以数组排序为例,来看看比较器的实现和作用。

package wangcc.com;

public class Player implements Comparable<Player> {
    private String name;
    private int age;
    private int point;
    private int assist;

    public Player(String name, int age, int point, int assist) {
        this.name = name;
        this.age = age;
        this.point = point;
        this.assist = assist;
    }

    @Override
    public String toString() {
        return "Player [name=" + name + ", age=" + age + ", point=" + point
                + ", assist=" + assist + "]";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getPoint() {
        return point;
    }

    public void setPoint(int point) {
        this.point = point;
    }

    public int getAssist() {
        return assist;
    }

    public void setAssist(int assist) {
        this.assist = assist;
    }

    @Override
    public int compareTo(Player o) {
        // TODO Auto-generated method stub
        if (this.age > o.age) {
            return 1;
        } else if (this.age < o.age) {
            return -1;
        }
        if (this.point > o.point) {
            return 1;
        } else if (this.point < o.point) {
            return -1;
        }

        return 0;
    }

}
package wangcc.com;

import java.util.Comparator;

public class PlayerComparator implements Comparator<Player> {

    @Override
    public int compare(Player o1, Player o2) {
        // TODO Auto-generated method stub
        if (o1.getAge() > o2.getAge()) {
            return 1;
        } else if (o1.getAge() < o2.getAge()) {
            return -1;
        }
        if (o1.getPoint() > o2.getPoint()) {
            return 1;
        } else if (o1.getPoint() < o2.getPoint()) {
            return -1;
        }
        return 0;
    }
}
package wangcc.com;

import java.util.Arrays;
import java.util.Comparator;

import org.junit.Test;

public class TestComp {

    @Test
    public void testComparable() {
        Player[] array = { new Player("kobe", 39, 25, 5),
                new Player("james", 33, 28, 8), new Player("paul", 33, 20, 4),
                new Player("durant", 29, 35, 5) };
        Arrays.sort(array);
        for (Player player : array) {
            System.out.println(player.toString());
        }
    }

    @Test
    public void testComparator() {
        Player[] array = { new Player("kobe", 39, 25, 5),
                new Player("james", 33, 28, 8), new Player("paul", 33, 20, 4),
                new Player("durant", 29, 35, 5) };
        Comparator<Player> comp = new PlayerComparator();
        Arrays.sort(array, comp);
        for (Player player : array) {
            System.out.println(player.toString());
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值