秒杀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());
}
}
四、运行效果图:
今日分享就到这儿了,喜欢的朋友们可以私信我哟!
推荐阅读
-
Kotlin 基础教程之注解与java中的注解比较
-
Java中的类加载器_动力节点Java学院整理
-
java比较器Comparable接口与Comaprator接口的深入分析
-
Kotlin 基础教程之注解与java中的注解比较
-
Java中对象的比较操作实例分析
-
浅析JAVA中过滤器、监听器、拦截器的区别
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
-
Java 比较器的用法
-
Java中 equals 和 == 的比较
-
谈谈知识的融汇贯通:以“java中的迭代器失效问题”为例