java compareable接口_Java中Comparable接口和Comparator接口的简单用法

本文介绍了Java中的Comparable接口和Comparator接口的使用。Comparable接口用于实现对象的自然排序,Comparator接口则允许在不修改已有类的情况下对对象进行定制排序。示例代码展示了如何在Cat和Dog类中使用这两个接口进行年龄排序。
摘要由CSDN通过智能技术生成

对象比较器

1、Comparable接口

此接口强行对实现它的每个类的对象进行整体排序,这种排序成为类的自然排序,类的compareTo方法称为类的自然比较方法。

代码示例

import java.util.Arrays;

public class Cat implements Comparable {

private String name;

private int age;

public Cat() {}

public Cat(String name, int age) {

this.name = name;

this.age = age;

}

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;

}

@Override

public String toString() {

return "Cat [name=" + name + ", age=" + age + "]";

}

@Override

public int compareTo(Cat o) {

return this.age - o.age;

}

// 添加main方法测试

public static void main(String[] args) {

Cat[] cats = { new Cat("Tom", 2), new Cat("Mikey", 1), new Cat("Jerry", 8) };

Arrays.sort(cats);

System.out.println(Arrays.toString(cats));

}

}

输出结果

4f458d62a818782dad38ba49e2f226e6.png

2、Comparator接口

Comparable接口要求自定义去实现,按照oo原则,应当对修改关闭,对扩展开放。

如果这个类已经定义好了,不想再去修改它,想实现比较,该如何实现呢?

Comparator接口:强行对某个对象Collection进行整体排序的比较

代码示例

已经写好的Dog类

import java.util.Arrays;

public class Dog {

private String name;

private int age;

public Dog() {}

public Dog(String name, int age) {

this.name = name;

this.age = age;

}

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;

}

@Override

public String toString() {

return "Dog [name=" + name + ", age=" + age + "]";

}

// 添加main方法测试

public static void main(String[] args) {

// 创建一个Dog对象数组

Dog[] dogs = { new Dog("Tom", 2), new Dog("Mikey", 1), new Dog("Jerry", 8) };

// 调用方法排序,并传入实现了Comparator接口的比较器DogAgeComparator

Arrays.sort(dogs, new DogAgeComparator());

System.out.println(Arrays.toString(dogs));

}

}

实现Comparator接口,并重写compare方法的比较器类DogAgeComparator,实现按年龄从小到大排序

import java.util.Comparator;

public class DogAgeComparator implements Comparator {

@Override

public int compare(Dog o1, Dog o2) {

return o1.getAge() - o2.getAge();

}

}

如果用lambda表达式会更简单(●'◡'●)

输出结果

cd72429a38be9847ab53dfcee29f35a5.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值