java布尔类型比较器_浅谈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{
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中几种常见的比较器的实现方法相关推荐
- java null什么意思_浅谈java中null是什么,以及使用中要注意的事项
1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...
- java 对象之间转换_浅谈java对象之间相互转化的多种方式
浅谈java对象之间相互转化的多种方式,对象,属性,参数,赋值,不支持 浅谈java对象之间相互转化的多种方式 易采站长站,站长之家为您整理了浅谈java对象之间相互转化的多种方式的相关内容. 第一种 ...
- java编程double相乘_浅谈Java double 相乘的结果偏差小问题
看下面的一段代码的运行结果: public class TestDouble { public static void main(String[] args) { double d =538.8; S ...
- java定义byte数组_浅谈java的byte数组的不同写法
(由于篇幅原因阐述的不够详细科学,不喜勿喷). 经常看到java中对byte数组的不同定义,粗略整理的一下: 一个字节(byte)=8位(bit),"byte数组"里面全部是&qu ...
- java变量命名规则_浅谈JAVA开发规范与开发细节(上)
开发团队在开发过程中,由于每个人的开发习惯,以及对于技术的理解深浅程度不一,往往一个项目在开发过程中,代码的质量,代码的风格都不尽相似,所以有一份适合团队的代码规范是非常有必要的,而一个团队的代码规范 ...
- java继承和引用_浅谈Java继承、传递
一.继承 1. 继承的概念: 子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 2. 继承中的初始化顺序: 从类的结构上而言,其内部可以有如下四种常见形态:属性(包括类属 ...
- java string的作用_浅谈java String不可变的好处
一.java内部String类的实现: java 8: public final class String implements java.io.Serializable, Comparable, C ...
- java forkjoin 简书_浅谈Java的Fork/Join并发框架
1. Fork/Join是什么 Oracle的官方给出的定义是:Fork/Join框架是一个实现了ExecutorService接口的多线程处理器.它可以把一个大的任务划分为若干个小的任务并发执行,充 ...
- java 初始化和清楚_浅谈Java中的初始化和清理
引言 这篇文章我们主要介绍Java初始化和清理的相关内容,这些内容虽然比较基础,但是还是在这边做一个简单的总结,方便以后查阅. 初始化过程 Java尽力保证:所有变量在使用之前都会得到恰当的初始化(对 ...
最新文章
- AndroidStudio更换黑色主题方法
- 在sql server里,日期字段按天数进行group by查询的方法
- RHEL7OSP-6.0的openstack云主机发放
- iOS UICollectionView的实现
- U-boot中TFTP 解释
- 【C++模板】特化与偏特化 template [partial] specialization
- 阻尼衰减曲线用python_阻尼的反击 | 被半篇论文爆脑两次是一种什么体验
- Android 移动开发知识体系
- Spring的核心思想,依赖注入
- 幅值与峰峰值的计算_峰峰值,峰值,平均值,有效值的关系
- 大数据预测模型的深度学习导论
- ICPC冠军教练亲自授课 字节跳动ICPC冬令营全球招募50支受训队
- 解决jupyter notebook :No module named ‘tensorflow‘ 及python.exe无法找到入口问题及500 : Internal Server Error
- c语言中的整型常量和实型常量
- Maven基础概念和安装配置教程
- 内存不能为“read” “written”的解决方法
- python基础知识大一总结与反思_反思总结及规划 其一
- CSS3之多列布局columns学习
- 交易系统单服务器tps,性能优化那些事之一,TPS和延时
- 大学生实用「自学网站/学习资料」,老学长含泪分享!