在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{

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 {

@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中几种常见的比较器的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法相关推荐

  1. java null什么意思_浅谈java中null是什么,以及使用中要注意的事项

    1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...

  2. java 对象之间转换_浅谈java对象之间相互转化的多种方式

    浅谈java对象之间相互转化的多种方式,对象,属性,参数,赋值,不支持 浅谈java对象之间相互转化的多种方式 易采站长站,站长之家为您整理了浅谈java对象之间相互转化的多种方式的相关内容. 第一种 ...

  3. java编程double相乘_浅谈Java double 相乘的结果偏差小问题

    看下面的一段代码的运行结果: public class TestDouble { public static void main(String[] args) { double d =538.8; S ...

  4. java定义byte数组_浅谈java的byte数组的不同写法

    (由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"byte数组"里面全部是&qu ...

  5. java变量命名规则_浅谈JAVA开发规范与开发细节(上)

    开发团队在开发过程中,由于每个人的开发习惯,以及对于技术的理解深浅程度不一,往往一个项目在开发过程中,代码的质量,代码的风格都不尽相似,所以有一份适合团队的代码规范是非常有必要的,而一个团队的代码规范 ...

  6. java继承和引用_浅谈Java继承、传递

    一.继承 1. 继承的概念: 子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序: 从类的结构上而言,其内部可以有如下四种常见形态:属性(包括类属 ...

  7. java string的作用_浅谈java String不可变的好处

    一.java内部String类的实现: java 8: public final class String implements java.io.Serializable, Comparable, C ...

  8. java forkjoin 简书_浅谈Java的Fork/Join并发框架

    1. Fork/Join是什么 Oracle的官方给出的定义是:Fork/Join框架是一个实现了ExecutorService接口的多线程处理器.它可以把一个大的任务划分为若干个小的任务并发执行,充 ...

  9. java 初始化和清楚_浅谈Java中的初始化和清理

    引言 这篇文章我们主要介绍Java初始化和清理的相关内容,这些内容虽然比较基础,但是还是在这边做一个简单的总结,方便以后查阅. 初始化过程 Java尽力保证:所有变量在使用之前都会得到恰当的初始化(对 ...

最新文章

  1. AndroidStudio更换黑色主题方法
  2. 在sql server里,日期字段按天数进行group by查询的方法
  3. RHEL7OSP-6.0的openstack云主机发放
  4. iOS UICollectionView的实现
  5. U-boot中TFTP 解释
  6. 【C++模板】特化与偏特化 template [partial] specialization
  7. 阻尼衰减曲线用python_阻尼的反击 | 被半篇论文爆脑两次是一种什么体验
  8. Android 移动开发知识体系
  9. Spring的核心思想,依赖注入
  10. 幅值与峰峰值的计算_峰峰值,峰值,平均值,有效值的关系
  11. 大数据预测模型的深度学习导论
  12. ICPC冠军教练亲自授课 字节跳动ICPC冬令营全球招募50支受训队
  13. 解决jupyter notebook :No module named ‘tensorflow‘ 及python.exe无法找到入口问题及500 : Internal Server Error
  14. c语言中的整型常量和实型常量
  15. Maven基础概念和安装配置教程
  16. 内存不能为“read” “written”的解决方法
  17. python基础知识大一总结与反思_反思总结及规划 其一
  18. CSS3之多列布局columns学习
  19. 交易系统单服务器tps,性能优化那些事之一,TPS和延时
  20. 大学生实用「自学网站/学习资料」,老学长含泪分享!

热门文章

  1. nginx重写与重定向区别_nginx学习十一 rewrite url重写以及重定向
  2. 洛谷 P1454【圣诞夜的极光】
  3. 【c】正负数二进制表示
  4. (翻译)Entity Framework技巧系列之一 - Tip 1 - 5
  5. 关于Debug和Release之本质区别(转)
  6. linux whois 命令 详解
  7. 【数据结构】DFS 代码模板
  8. WSL2之kali从C盘迁移到E盘
  9. wireshark之不显示ip问题(五)
  10. Ubuntu18.04安装markdown工具Typora