欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

秒杀Java中的Comparator比较器

程序员文章站 2022-05-23 14:17:06
...

教你使用Java中的Comparator比较器

一、知识点简述:

自定义比较器:
  • Comparator:比较器
  • Comparator是一个接口,无法直接创建对象,需要实现类去创建
创建Comparator的步骤:
  • 1.定义一个比较器的类,去实现Comparator接口
  • 2.实现compare方法,在compare方法中自定义比较的规则

二、案例题目及要求:

步骤:

  • 1.创建Person类,包含属性:身份证号、姓名、年龄;
  • 2.创建四个对象,把四个对象存入到list集合;
  • 3.对四个对象分别根据年龄和身份证号进行单独排序;

三、代码实现:

1.创建Person类

public class Person {
	private String IdCard;
	private String name;
	private int age;
	//get set方法
	public String getIdCard() {
		return IdCard;
	}
	public void setIdCard(String idCard) {
		IdCard = idCard;
	}
	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 Person(String idCard, String name, int age) {
		super();
		IdCard = idCard;
		this.name = name;
		this.age = age;
	}
	//重写toString方法
	@Override
	public String toString() {
		return "Person [IdCard=" + IdCard + ", name=" + name + ", age=" + age + "]"+"\n";
	}
	//无参构造器
	public Person() {
		super();
	}

2.创建四个子类,分别继承Person类:

//学生类
	class Student extends Person{

	}
	//工人类
	class Worker extends Person{
		
	}
	//学者类
	class Scholar extends Person{
	}
	//小偷类
	class Thief extends Person{
	}

3.编写程序入口,分别创建以上四个类的对象,并赋值 :

//程序入口
	public static void main(String[] args) {
		//创建Student对象
		Person st = new Student();
		//赋值
		st.setName("火麟飞");
		st.setIdCard("621760388988");
		st.setAge(17);
		st.getName();
		st.getIdCard();
		st.getAge();
		//创建worker对象
		Person wk = new Worker();
		wk.setName("天羽");
		wk.setIdCard("821760388966");
		wk.setAge(21);
		wk.getName();
		wk.getIdCard();
		wk.getAge();
		//创建scholar对象
		Person sl = new Scholar();
		sl.setName("小胖墩");
		sl.setIdCard("421960386866");
		sl.setAge(18);
		wk.getName();
		wk.getIdCard();
		wk.getAge();
		//创建Thief对象
		Person tf = new Thief();
		tf.setName("夜凌云");
		tf.setIdCard("961860355899");
		tf.setAge(35);
		tf.getName();
		tf.getIdCard();
		tf.getAge();

4.创建List集合,将四个对象存进去:

//创建一个list集合
		ArrayList<Person> list = new ArrayList<Person>();
		//将四个对象存入到list集合
		list.add(st);
		list.add(wk);
		list.add(sl);
		list.add(tf);	
		System.out.println("排序前的结果为:\n"+list);
		System.out.println("==================================================");

5.自定义排序(根据年龄):

//根据年龄排序
		//创建比较器比较的对象
		ByAge ba = new ByAge();
		Collections.sort(list, ba);
		System.out.println("根据年龄排序后的结果为:\n"+list);
		System.out.println("==================================================");		

5.1 根据年龄排序的方法:

//根据年龄排序
	class ByAge implements Comparator<Person>{

		@Override
		public int compare(Person o1, Person o2) {
			
			return o1.getAge()-o2.getAge();
		}
		
	}

6.自定义根据身份证号排序:

//根据身份证号排序
		//创建比较器比较的对象
		ByIdCard bc = new ByIdCard();
		Collections.sort(list, bc);
		System.out.println("根据身份证号排序的结果为:\n"+list);

6.1 根据身份证号排序的方法:

//根据身份证号排序
	class ByIdCard implements Comparator<Person>{

	
		@Override
		public int compare(Person o1, Person o2) {
			
			return  o1.getIdCard().compareTo(o2.getIdCard());
		}
		
	}

四、运行效果图:

秒杀Java中的Comparator比较器
今日分享就到这儿了,喜欢的朋友们可以私信我哟!
秒杀Java中的Comparator比较器