comparator和comparable接口

通常

comparable接口用于对同一个类的不同对象做比较

comparator接口用于对不同类的不同对象做比较

comparble接口中只有一个方法:compareTo比较方法,,用于比较当前对象和另一个对象的大小。当一个自定义类实现了comparble接口时,就必去强制重写compar To比较方法。

如图创建学生对象类,实现comparble方法,重写compar To 比较方法

注意:如果一个类实现了comparable接口,那么它就可以直接使用Collections.sort()方法进行排序

public class Student implements Comparable<Student> {

	private String name;
	private String age;


	@Override
	public int compareTo(Student o) {
		// TODO Auto-generated method stub
		return 0;
	}

重写compar To 比较方法

测试类

import java.util.Arrays;
import java.util.ArrayList;

public class Demo01 {
public static void main(String[] args) {
	List<Student>students=new ArrayList<Student>();
	students.add(new Student("a",27));
	students.add(new Student("e",24));
	students.add(new Student("z",25));
	students.add(new Student("d",21));
	Collections.sort(students);
	System.out.println(students);
}
}
//输出结果
[Student [name=a, age=27], Student [name=e, age=24], Student [name=z, age=25], Student [name=d, age=21]]

以姓名属性为例进行比较,因为它是String类型,string类已经实现了comparble接口,其比较规则为。

如果认为第一个元素 >  第二个元素 返回正整数即可。

如果认为第一个元素 < 第二个元素返回负整数即可。

如果认为第一个元素 = 第二个元素返回0即可

若改用age做比较

谁调用compareTo这个方法谁就是this,o就是需要跟它比较的值。

this-o>0升序

this-o<0降序

comparator接口中有compare()方法,用于对不同类的对象进行排序,同时可以自定义比较逻辑

public class Student {

	private String name;
	private int 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;
	}

	public Student() {
	}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

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

}
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


public class Demo01 {
public static void main(String[] args) {
	List<Student>students=new ArrayList<Student>();
	students.add(new Student("a",27));
	students.add(new Student("e",24));
	students.add(new Student("z",25));
	students.add(new Student("d",21));
	 Collections.sort(students, new Comparator<Student>() {
         @Override
         public int compare(Student o1, Student o2) {
             return o1.getAge() - o2.getAge();
         }
     });
	
	System.out.println(students);
}
}

输出结果

[Student [name=d, age=21], Student [name=e, age=24], Student [name=z, age=25], Student [name=a, age=27]]

o1-o2升序

o2-o1降序

总结:

如果一个类实现了comparable接口,那么它就可以直接使用Collections.sort()方法进行排序;如果一个类没有实现comparable接口,但是我们仍然需要对它进行排序,那么我们可以通过实现comparator接口来定义一个比较器,然后将比较器对象传入Collections.sort()方法中进行排序。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值