位置: 编程技术 - 正文

【java对象比较器和克隆】(java对象怎么比较)

编辑:rootadmin
一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类。我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序。排序操作在日常开发中经常要使用到。那么String类和自定义类能不能使用Arrays.sort()来进行排序呢。下面我们来试试,如下:public class Mystring { public static void main(String[] args) { String []a={"早上","中午","下午","傍晚","晚上"}; Person[] b={ new Person("小白",),new Person("小黑",), new Person("小红",),new Person("小紫",)}; Arrays.sort(a); for(int i=0;i<a.length;i&#;&#;) System.out.print(a[i]); System.out.print("rn"); Arrays.sort(b); for(int i=0;i<b.length;i&#;&#;) System.out.println(b[i]); } } //自定义类 class Person { public String name; public int age; public Person(String name,int age) { this.name=name; this.age=age; } } 复制代码程序运行结果: 我们发现String可以调用Arrays.sort()函数,而我们自定义的Person类报错,看错误的关键字 Comparable打开String源码由此引入比较器Comparable,我们下面利用Comparable接口来实现Person使用Arrays.sort()按年龄排序递增排序。 Comparable接口能够对实现它的类的对象进行排序,主要使用compareTo函数来实现排序。compareTo函数返回int类型,分别返回-1,0,1对应小于,等于,大于。 把代码改为:public class Mystring { public static void main(String[] args) { String []a={"早上","中午","下午","傍晚","晚上"}; Person[] b={ new Person("小白",),new Person("小黑",), new Person("小红",),new Person("小紫",)}; Arrays.sort(a); for(int i=0;i<a.length;i&#;&#;) System.out.print(a[i]); System.out.print("rn"); Arrays.sort(b); for(int i=0;i<b.length;i&#;&#;) System.out.println(b[i]); } } //自定义类 class Person implements Comparable<Person>{ public String name; public int age; public Person(String name,int age) { this.name=name; this.age=age; } //比较器的比较函数 /** * 如果当前对象小于比较对象,返回-1 * 如果当前对象等于比较对象,返回0 * 如果当前对象大于比较对象,返回1 */ @Override public int compareTo(Person o) { //对象为空,抛出空指针异常 if(o==null) throw new NullPointerException(); if(this.age<o.age) return -1; if(this.age>o.age) return 1; return 0; } //重写toString方法 @Override public String toString() { return "Person [name=" &#; name &#; ", age=" &#; age &#; "]"; } } 复制代码 为自定义的Person实现比较器Comparable接口,即可调用Arrays.sort()进行排序。另外还有另一种实现方法,实现Comparator接口。public class Mystring { public static void main(String[] args) { String []a={"早上","中午","下午","傍晚","晚上"}; Person[] b={ new Person("小白",),new Person("小黑",), new Person("小红",),new Person("小紫",)}; Arrays.sort(a); for(int i=0;i<a.length;i&#;&#;) System.out.print(a[i]); System.out.print("rn"); Arrays.sort(b,new PersonComparator()); for(int i=0;i<b.length;i&#;&#;) System.out.println(b[i]); } } //自定义类 class Person { public String name; public int age; public Person(String name,int age) { this.name=name; this.age=age; } @Override public String toString() { return "Person [name=" &#; name &#; ", age=" &#; age &#; "]"; } } class PersonComparator implements Comparator<Person>{ //比较器的比较函数 /** * 如果当前对象小于比较对象,返回-1 * 如果当前对象等于比较对象,返回0 * 如果当前对象大于比较对象,返回1 */ @Override public int compare(Person o1, Person o2) { //对象为空,抛出空指针异常 if(o1==null||o2==null) throw new NullPointerException(); if(o1.age<o2.age) return -1; if(o1.age>o2.age) return 1; return 0; } } 复制代码二.对象的克隆Clone将一个对象复制一份,称作对象的克隆技术。克隆对象分为两步。1.实现Cloneable标记接口 Cloneable是一个标记接口,此接口没有定义任何方法。只是作为一个标记给虚拟机。2.重写Object的clone方法//自定义类person实现Cloneable接口 class Person implements Cloneable { public String name; public int age; public Person(String name,int age) { this.name=name; this.age=age; } //重写Object的clone方法 @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } 复制代码克隆的调用:public static void main(String[] args) { Person temp=new Person("王&#;玛",); try { Person ok=(Person)temp.clone();//把Object类转化为Person、 System.out.println(ok.name);//输出王&#;玛 } catch (CloneNotSupportedException e) { e.printStackTrace(); } } 复制代码这样既可以完成对一个对象的克隆,当我们要创建一系列类&#;的对象时,可以考虑使用克隆技术可以得到更好的性能,比你new创建好一些

推荐整理分享【java对象比较器和克隆】(java对象怎么比较),希望有所帮助,仅作参考,欢迎阅读内容。

【java对象比较器和克隆】(java对象怎么比较)

文章相关热门搜索词:java对象内容比较,java equals比较对象,java 对比,java对象怎么比较,java 对比,java equals比较对象,java对象比较器,java对象比较器,内容如对您有帮助,希望把文章链接给更多的朋友!

【java的Arrays工具类】 java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。静态方法是属于类的,不是属于类的对象。所以可以直接使用类名加方法名进行调用

[置顶] android 性能优化 1.Java内存控制对于字符串操作而言如果需要连加这样的操作建议使用StringBuilder,经过调试不难发现如果你的字符串每次连加,使用String需要的内存开销

Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传GOOD 转自:

标签: java对象怎么比较

本文链接地址:https://www.jiuchutong.com/biancheng/383297.html 转载请保留说明!

上一篇:【Java的String详解】(java stringapi)

下一篇:【java的Arrays工具类】(java arraysort)

  • 预收款交税规定
  • 实收资本印花税最新规定
  • 个人给单位做事怎么开发票
  • 解除劳动合同支付违约金合法吗
  • 兼职劳务税率是多少2020
  • 自建厂房的进项税额能一次性抵扣吗
  • 暂估资产会计处理
  • 处置投资性房地产的损益怎么算
  • 待抵扣进项税什么时候抵扣
  • 结转损益类账户余额
  • 生产车间用电产品有哪些
  • 营改增后房地产企业增值税税率
  • 应返还财政额度是什么科目
  • 月末结转所有收入类账户
  • 营改增后房地产企业增值税税收筹划存在问题
  • 分公司可以合伙吗
  • 企业出口不退税怎么处理
  • 金税三期退税
  • 信息技术包括哪几个方面
  • 注册资本认缴与注册登记实操
  • 进口货物如何缴增值税
  • 怎么让自己的电脑有网吧认证
  • 存货监盘计划要求,在对存货盘点结果进行测试时
  • 一个集团的分公司干过活再去另一个分公司会被发现吗
  • PHP mysql_result()函数使用方法
  • php解析原理
  • 租赁固定资产成本怎么算
  • 预缴增值税少交了
  • 多枝发财树怎么修剪
  • jsPDF + html2canvas A4分页截断 完美解决方案(含代码 + 案例)
  • 小白学php需要多久能上手
  • 汇总收款凭证怎么做账
  • 会计虚假做账
  • 现金长款和短款怎么处理
  • 直线法摊销的账面价值
  • 特殊性税务处理弥补亏损限额
  • 封装和调用
  • nn.lstm输出
  • 37.JavaScript对象与JSON格式的转换,JSON.stringify、JSON.parse方法的使用方法和注意事项
  • 一般纳税人不动产租赁可以简易征收吗
  • 商业汇票的承兑银行必须具备下列条件
  • 会计备案报送期间
  • vue3+ts+MicroApp实战教程
  • curl抓包
  • 计提应收账款坏账准备属于谨慎性吗
  • 工会经费怎么计算缴纳
  • 费用结转的方法有哪些
  • 汽修厂的发票开的是什么票
  • mysql怎么修改
  • 专票多长时间
  • 税前扣除原则和扣除金额
  • 职工工伤住院期间的各项费用由谁负责
  • 分期收款发出商品一批,售价50000
  • 增值税负数发票怎么做账
  • 库存商品与存货总额之比
  • 工厂加工费的账务怎么做
  • 会计怎么做的
  • 如何查看连接网络的密码
  • 利用rpm安装软件包时,应使用命令选项
  • mysql5.6解压版安装教程
  • fedora29
  • win8系统如何关机
  • win7点开始一直跳闪
  • Win7升级win10后可以删除2345吗
  • 关于dns的说法错误的是
  • win7怎样禁用无线网络连接
  • perl运行环境
  • nodejs 程序 打包服务端
  • shell脚本用法
  • python网络爬虫的流程图
  • python直接访问私有属性的简单方法
  • 综治维稳中心是干啥的啊
  • 怎么查税务专管员是谁的名字
  • 济南税务局电话是多少
  • 出口退税的汇率按什么时候的汇率
  • 安徽省国家税务局网上办税平台
  • 北京市大兴区税务局电话
  • 留抵退税退回的款如何做账
  • 税务局纳税服务工作总结
  • 地税局基层职位怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设