javase:comparator接口

import java.util.Comparator;
import java.util.TreeSet;

/*
放到TreeSet或者TreeMap集合key部分的元素要进行排序,有两种方式:
第一种:放在集合中的元素实现Comparable接口
第二种:在构造TreeSet或者TreeMap集合的时候传一个比较器对象
Comparable接口适合比较规则不发生改变只有1个;Comparator适合比较规则频繁切换有许多个
后者的设计符合OCP原则

其中:
Comparable接口,实现k.compareTo(t.key)方法
Comparator接口,实现compare(t.key1, t.key2)方法
 */
public class CompareComparator {
    public static void main(String[] args) {
        // 创建TreeSet集合的时候,需要给构造方法传递一个比较器,才可以使用比较器
        TreeSet<Animal> animals = new TreeSet<>(new AnimalComparator());

        // new出对象后放进animals集合中
        animals.add(new Animal(1000));
        animals.add(new Animal(200));
        animals.add(new Animal(1200));

        for (Animal animal : animals) {
            System.out.println(animal);
        }
    }
}

class Animal {
    int age;

    public Animal(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "小乌龟[age=" + age + "]";
    }
}

// 编写比较器,实现Comparator借口
class AnimalComparator implements Comparator<Animal> {

    // 指定比较规则
    @Override
    public int compare(Animal o1, Animal o2) {
        return o1.age - o2.age;
    }
}

/*不使用比较器,可以使用匿名内部类的方式:类没有名字,直接new接口
11行改为:
    TreeSet<Animal> animals = new TreeSet<>(new Comparator<Animal>() {
        @Override
        public int compare(Animal o1, Animal o2)
        return o1.age - o2.age;
    });
其中,不写38-45行的代码,加一个的泛型<Animal>,加{}表示实现
 */

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值