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

浅谈Java中几种常见的比较器的实现方法

程序员文章站 2024-02-26 16:58:04
在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同...

在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。

通常对象之间的比较可以从两个方面去看:

第一个方面:对象的地址是否一样,也就是是否引用自同一个对象。这种方式可以直接使用“==“来完成。

第二个方面:以对象的某一个属性的角度去比较。

从最新的jdk8而言,有三种实现对象比较的方法:

一、覆写object类的equals()方法;

二、继承comparable接口,并实现compareto()方法;

三、定义一个单独的对象比较器,继承自comparator接口,实现compare()方法。

由于使用的排序方式的不同,具体选择哪种方法来实现对象的比较也会有所不同。

覆写equals()方法,一般用于自己实现对象数组排序的情况,而对于要使用java内置的排序算法时,使用后面两种方式都是可行的。

先来看第二种方式,这种方式就是让自己编写的类继承comparable接口,并实现compareto()方法,这种情况下,在使用java.util.arrays.sort()

方法时,不用指定具体的比较器,sort()方法会使用对象自己的比较函数来完成对象的排序。

下面是一个具体的例子:

import java.util.arrays;

class bookcook implements comparable<bookcook>{
	private string title;
	private double price;
	public bookcook(string title,double price){
		this.title = title;
		this.price = price;
	}
	@override
	public string tostring() {
		return "书名:"+this.title+",价格:"+this.price;
	}
	@override
	public int compareto(bookcook o) {
		if(this.price > o.price){
			return 1;
		}else if(this.price < o.price){
			return -1;
		}else{
			return 0;
		}
	}
}

一般我们使用以上两种方法就能够满足实际的开发问题。但是当出现以下情况时,就需要用到comparator接口:

要在已经开发好的代码的基础上完善对象的比较功能时,又不想更改之前的代码,这种情况下,从jdk1.8之后出现了comparator接口,是对这种情况的一个弥补。

这种情况下,我们需要单独定义一个对象比较器,继承comparator接口,并实现compare()方法。示例代码如下:

class student {
	private string name;
	private double score;
	public student(string name,double score){
		this.name = name;
		this.score = score;
	}
	public double getscore(){
		return this.score;
	}
	@override
	public string tostring() {
		return "姓名:"+this.name+",分数:"+this.score;
	}
	
}
class studentcomparator implements comparator<student> {
	@override
	public int compare(student o1,student o2) {
		if(o1.getscore() > o2.getscore()){
			return 1;
		}else if(o1.getscore() < o2.getscore()){
			return -1;
		}else{
			return 0;
		}
	}
}
public class testcomparator {

	public static void main(string[] args) {
		
		student[] sts = new student[]{
				new student("小戴",60),
				new student("小王",90),
				new student("老王",80),
				new student("小萱",95)
		};
		
		java.util.arrays.sort(sts, new studentcomparator());
		system.out.println(java.util.arrays.tostring(sts));
	}
}

以上三种情况,因具体情况的不同,选择不同的方法解决实际的问题。

这篇浅谈java中几种常见的比较器的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。