Comparator的使用

本文介绍了如何在Java中使用Comparator接口实现定制排序。通过创建Person类并重写toString方法,然后编写两个Comparator类,一个按name升序排序,另一个按age升序排序。在主类中,对Person对象数组进行两次不同排序并输出结果,强调Comparator类的定义位置和在sort方法中的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

突然看到了pta上的题,简单的复习了一下comparator的简单使用

题意答题是这样的:

创建一个Person类,成员为:int age,String name;里面重写起toString()的方法,格式为name-age;

再编写两个Comparator类:

          编写 NameComparator 类,实现对name进行升序排序

          编写 AgeComparator 类,对age进行升序排序

然后下面是测试

输入n

输入n行name age,并创建n个对象放入数组

对数组按照name进行升序排序后输出。

对数组按照age进行升序排序后输出。

大体的意思就是这样,也就是要在不改变主类的情况下,通过Comparator接口来实现定制排序

首先先写这两个Comparator的类,只需要重写其比较方法即可,可以写在测试主类的下方

------注意这两个类一定要在主类外面,当初自己放在里面费了一阵功夫才看出来

class NameComparator implements Comparator<Person>{
	public int compare(Person p1,Person p2) {
		return p1.getName().compareTo(p2.getName());
	}
}
class AgeComparator implements Comparator<Person>{
	public int compare(Person p1,Person p2) {
		return p1.getAge()>p2.getAge()?1:-1;
	}
}

 

-----------这两个类的使用也是在sort里面用的,这个地方老是忘了!---------

测试类就比较好写了

package demo1;
import java.util.*;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		Person person[] = new Person[n];
		for(int i = 0; i < n; i++) {
			String name = sc.next();
			int age =sc.nextInt();
			Person tmp = new Person(age,name);
			person[i] = tmp;
		}
		System.out.println("name排序:");
		Arrays.sort(person,new NameComparator());
		for(Person i : person) {
			System.out.println(i);
		}
		System.out.println("age排序:");
		Arrays.sort(person,new AgeComparator());
		for(Person i : person) {
			System.out.println(i);
		}
		sc.close();
	}

}

最后便是最简单的Person类了

package demo1;

public class Person {
	private int age;
	private String name;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Person(int age,String name) {
		this.age = age;
		this.name = name;
	}
	public String toString() {
		return this.name+"-"+this.age;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值