Java-对象比较器
发布日期:2021-10-22 14:27:04 浏览次数:2 分类:技术文章

本文共 3169 字,大约阅读时间需要 10 分钟。

在Java中要想对两个对象进行比较大小,需要实现Comparable接口或Comparator接口。String类型的值之所以可以比较大小(汉字根据ANSI值的大小进行比较),是因为String类实现了Comparable<T>接口。如果要比较的对象没有实现Comparable接口或Comparator接口而直接比较会报 java.lang.ClassCastException类型转换异常。

两个对象进行比较方法一:实现Comparable<T>接口

Person类是要比较的对象

package com.lym.comparator;/** * 人类 * 要使该类能进行比较,该类必须实现Comparable接口 * @author Administrator * */public class Person implements Comparable
{ private String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); 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 "Person [name=" + name + ", age=" + age + "]"; } //当前类按年龄由小到大排序 //1和-1调换后就是按年龄由大到小排序的 @Override public int compareTo(Person o) { if(o == null){ throw new NullPointerException(); } if(this.age>o.age){ return 1; }else if(this.age
方法二:实现Comparator<T>接口

实现Comparator<T>接口与Comparable<T>接口有什么区别吗?

答:Comparable<T>接口 是在要比较的对象类创建的时候就实现了,也就是在项目上线之前就设计好了,大多数时候是采用这种方法。但是,有的时候项目已经上线了,此时我们还要对某个类进行比较,而此时该类还没有实现Comparable<T>接口,为了遵守软件开发中“对扩展开放,对修改关闭”的原则,我们可以再定义一个比较器类,实现Comparator<T>接口,这样我们就不会破坏要比较的类的原有结构了。

自定义比较器类

package com.lym.comparator;import java.util.Comparator;/** * 自定义比较器类 *  * @author Administrator *  */public class ComparatorDemo implements Comparator
{ @Override public int compare(Person2 o1, Person2 o2) { if (o1 == null || o2 == null) { throw new NullPointerException();// 空指针异常 } if (o1.getAge() > o2.getAge()) { return 1; } else if (o1.getAge() < o2.getAge()) { return -1; } return 0; }}

Person2类

package com.lym.comparator;/** * 人类 *  * @author Administrator *  */public class Person2 {	private String name;	private int age;	public Person2() {		super();	}	public Person2(String name, int age) {		super();		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 "Person2 [name=" + name + ", age=" + age + "]";	}}

对象比较器测试类

package com.lym.comparator;import java.util.Arrays;/** * 对象比较器测试类 * @author Administrator * */public class ComparableDemo {	public static void main(String[] args) {		String[] names = {"利亚","藤兰","泉彩","井空","岛爱","结衣"};				Person[] persons = {				new Person("泉彩",23),new Person("岛爱",25),				new Person("藤兰",41),new Person("结衣",35),				new Person("利亚",28),new Person("井空",32)		};				Person2[] persons2 = {				new Person2("泉彩",23),new Person2("岛爱",25),				new Person2("藤兰",41),new Person2("结衣",35),				new Person2("利亚",28),new Person2("井空",32)		};				Arrays.sort(names);		System.out.println(Arrays.toString(names));				//实现Comparable
接口 Arrays.sort(persons);//按Person对象的age属性比较大小 System.out.println(Arrays.toString(persons));//输出比较后的对象数组 //自定义比较器,实现Comparator
接口 Arrays.sort(persons2); System.out.println(Arrays.toString(persons2)); }}

转载于:https://www.cnblogs.com/liuyanmin/p/5146534.html

转载地址:https://blog.csdn.net/weixin_30361641/article/details/95869247 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:jira 在bug提交时经办人不填写会自动指派给项目负责人
下一篇:Apache工作原理

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月12日 21时48分56秒