java compareto重写_Java 关于重写compareTo方法
概述
"当一个类实现类Comparable接口,此类就可以跟很多泛型算法(generic algorithm) 以及依赖于该接口
的集合实现(Collection implementation)进行协作"
比如:字母排序,按数字排序,年代排序等等某种**定制排序**
Comparable接口
public interface Comparable{
int compareTo(T t);
}
int compareTo(T t)方法说明
定义:比较此对象与指定对象的顺序。
返回:负整数、零或正整数。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
升序/降序
int result=obj1.compareTo(obj2);
假如result返回1。Collections.sort(List)方法就是升序;
假如result返回-1。Collections.sort(List)方法就是降序;
代码示例:
第一种:
对多个关键域,顺序比较
package com.sta;
public class Student implements Comparable {
private int age;
private float height;
private String name;
......
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + Float.floatToIntBits(height);
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if (obj == this) {
return true;
}
if (obj != null && obj instanceof Student) {
Student student = (Student) obj;
return student.age == this.age && Float.floatToIntBits(student.height) == Float.floatToIntBits(this.height)
&& (this.name == null ? student.name == null : this.name.equals(student.name));
}
return false;
}
**@Override
public int compareTo(Student student) {
// TODO Auto-generated method stub
if(this.age > student.age){
return 1;
}
if(this.age < student.age){
return -1;
}
if(this.height>student.height){
return 1;
}
if(this.height
return -1;
}
return this.name.compareTo(student.name);
}**
}
第二种:
写法如下
@Override
public int compareTo(Student student) {
// TODO Auto-generated method stub
int resultAge = this.age - student.age;
if(resultAge!=0){
return resultAge;
}
float resultHeight = this.height - student.height;
if(resultHeight != 0){
return Float.floatToIntBits(resultHeight);
}
return this.name.compareTo(student.name);
}
第二种写法:*如果int型参数的阈值(int resultAge = this.age - student.age)小于或等于Integer.MaxVale时,
结果值:restultAge 将会溢出,并返回一个负值*.
第三种:
如果当前类某个作用域的参数类型为引用类型
1:此引用类型可以考虑实现Comparable接口 ;
2:亦可构造一个Comparator 比较器.
如下:
package com.sta;
import java.util.Comparator;
import java.util.Date;
public class Student implements Comparable {
private int age;
private float height;
private String name;
private Info info;
......
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + Float.floatToIntBits(height);
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((info == null) ? 0 : info.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if (obj == this) {
return true;
}
if (obj != null && obj instanceof Student) {
Student student = (Student) obj;
return student.age == this.age && Float.floatToIntBits(student.height) == Float.floatToIntBits(this.height)
&& (this.name == null ? student.name == null : this.name.equals(student.name))
&& (this.info == null ? student.info == null : this.info.equals(student.info));
}
return false;
}
@Override
public int compareTo(Student student) {
// TODO Auto-generated method stub
if (this.age > student.age) {
return 1;
}
if (this.age < student.age) {
return -1;
}
if (this.height > student.height) {
return 1;
}
if (this.height < student.height) {
return -1;
}
Comparator comparator = new Comparator() {
@Override
public int compare(Info o1, Info o2) {
// TODO Auto-generated method stub
Date date1 = o1.getBirthday();
Date date2 = o2.getBirthday();
int i = date1.compareTo(date2);
if (i != 0) {
return i;
}
String address1 = o1.getAddress();
String address2 = o2.getAddress();
return address1.compareTo(address2);
}
};
**int resultInfo = comparator.compare(this.info, student.info);**
if (resultInfo != 0) {
return resultInfo;
}
return this.name.compareTo(student.name);
}
}
Student 作用域之一(Info):
package com.sta;
import java.util.Date;
public class Info {
private Date birthday;
private String address;
public Info() {
super();
}
.............
}
最后说两句:
1:比较基本数据类型时,可以使用”” 2:亦可使用(Boxed primitive Type)基本类型封装类的compare方法 3:待补充…..
java compareto重写_Java 关于重写compareTo方法相关推荐
- java tostring 库_java重寫toString()方法
toString()方法是Object類的方法,調用toString()會返回對象的描述信息. 1)為什么重寫toString()方法呢? 如果不重寫,直接調用Object類的toString()方法 ...
- java 二分查找_Java数组之Arrays方法
Java数组之Arrays方法,拉勾IT课小编为大家分析,JAVA数组的一些方法,提升开发水平,增强技术开发水平,不断提升个人的技术能力,在对于java开发领域,很多人都从基础做起. 1. 数组的工具 ...
- java集合示例_Java集合的addAll()方法和示例
集合类addAll()方法addAll()方法在java.lang包中可用. addAll()方法用于将所有给定元素(ele)放入给定集合(co). addAll()方法是一个静态方法,可以使用类名进 ...
- java parsefloat 误差_Java Float类parseFloat()方法与示例
Float类parseFloat()方法parseFloat()方法在java.lang包中可用. parseFloat()方法用于返回与给定String表示形式相对应的float值,换句话说,我们可 ...
- java getmethod类_Java Class类 getMethod()方法及示例
Class类getMethod()方法getMethod()方法在java.lang包中可用. getMethod()方法用于返回Method对象,这些对象指示该类的给定公共方法或由此Class对象表 ...
- java newinstance 包_Java Class类 newInstance()方法及示例
Class类newInstance()方法newInstance()方法在java.lang包中可用. newInstance()方法用于创建此Class对象表示的类的新实例. newInstance ...
- java compare时间_java.time.LocalDateTime compareTo()方法
java.time.LocalDateTime compareTo()方法 java.time.LocalDateTime.compareTo(ChronoLocalDateTime other)方法 ...
- java compareto 中文_java中的compareto方法的详细介绍
一.java中的compareto方法 1.返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值 String a1 = "a" ...
- java 扑克牌排序_java 怎么写compareto方法实现扑克牌排序
展开全部 public class Card { private String face; private String suit; public String getFace() { return ...
最新文章
- 深度学习——训练时碰到的超参数
- JSP数据交互(二)
- 应对 Job 场景,Serverless 如何帮助企业便捷上云
- linux su和sudo命令的区别
- mysql havequerycache_如何开启MySQL的中的Query Cache缓存
- Spring+SpringMVC+mybatis+Quartz整合
- python基础知识——函数(中)
- 2019全国知识图谱与语义计算大会
- 使用lockcop软件检测c++死锁
- iPhone越狱后,常见路径大全
- android图标分组名称唯美,手机屏幕分组好听名字
- 【最新原创】中国移动(中国联通)_通信账单,详单,个人信息抓取爬虫代码
- 研究生数学建模经验分享
- java程序的组织结构
- ElasticSearch配合mysql实现同义词热更新
- PHP 实现PDF转图片
- 人生四大铁:一起同过窗,一起扛过枪,一起嫖过娼,一起分过赃。
- altium designer利用向导画封装库详解
- 【安全测试】数据安全性
- 【Lombok】@Log | 如何优雅的进行日志记录