概述

"当一个类实现类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方法相关推荐

  1. java tostring 库_java重寫toString()方法

    toString()方法是Object類的方法,調用toString()會返回對象的描述信息. 1)為什么重寫toString()方法呢? 如果不重寫,直接調用Object類的toString()方法 ...

  2. java 二分查找_Java数组之Arrays方法

    Java数组之Arrays方法,拉勾IT课小编为大家分析,JAVA数组的一些方法,提升开发水平,增强技术开发水平,不断提升个人的技术能力,在对于java开发领域,很多人都从基础做起. 1. 数组的工具 ...

  3. java集合示例_Java集合的addAll()方法和示例

    集合类addAll()方法addAll()方法在java.lang包中可用. addAll()方法用于将所有给定元素(ele)放入给定集合(co). addAll()方法是一个静态方法,可以使用类名进 ...

  4. java parsefloat 误差_Java Float类parseFloat()方法与示例

    Float类parseFloat()方法parseFloat()方法在java.lang包中可用. parseFloat()方法用于返回与给定String表示形式相对应的float值,换句话说,我们可 ...

  5. java getmethod类_Java Class类 getMethod()方法及示例

    Class类getMethod()方法getMethod()方法在java.lang包中可用. getMethod()方法用于返回Method对象,这些对象指示该类的给定公共方法或由此Class对象表 ...

  6. java newinstance 包_Java Class类 newInstance()方法及示例

    Class类newInstance()方法newInstance()方法在java.lang包中可用. newInstance()方法用于创建此Class对象表示的类的新实例. newInstance ...

  7. java compare时间_java.time.LocalDateTime compareTo()方法

    java.time.LocalDateTime compareTo()方法 java.time.LocalDateTime.compareTo(ChronoLocalDateTime other)方法 ...

  8. java compareto 中文_java中的compareto方法的详细介绍

    一.java中的compareto方法 1.返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值 String a1 = "a" ...

  9. java 扑克牌排序_java 怎么写compareto方法实现扑克牌排序

    展开全部 public class Card { private String face; private String suit; public String getFace() { return ...

最新文章

  1. 深度学习——训练时碰到的超参数
  2. JSP数据交互(二)
  3. 应对 Job 场景,Serverless 如何帮助企业便捷上云
  4. linux su和sudo命令的区别
  5. mysql havequerycache_如何开启MySQL的中的Query Cache缓存
  6. Spring+SpringMVC+mybatis+Quartz整合
  7. python基础知识——函数(中)
  8. 2019全国知识图谱与语义计算大会
  9. 使用lockcop软件检测c++死锁
  10. iPhone越狱后,常见路径大全
  11. android图标分组名称唯美,手机屏幕分组好听名字
  12. 【最新原创】中国移动(中国联通)_通信账单,详单,个人信息抓取爬虫代码
  13. 研究生数学建模经验分享
  14. java程序的组织结构
  15. ElasticSearch配合mysql实现同义词热更新
  16. PHP 实现PDF转图片
  17. 人生四大铁:一起同过窗,一起扛过枪,一起嫖过娼,一起分过赃。
  18. altium designer利用向导画封装库详解
  19. 【安全测试】数据安全性
  20. 【Lombok】@Log | 如何优雅的进行日志记录

热门文章

  1. Scrum中story point的预估
  2. 如何打印出爱心,以及彩色爱心
  3. 【VUE】看完这篇文章能够了解es6特性和vue基础
  4. 日系风游戏音乐的特点
  5. 面向个性化学习的数据挖掘方法
  6. Kali扫描工具Maltego
  7. 2010国外特色电子商务网站大全
  8. 【细碎知识6】字扩展、位扩展和字位扩展
  9. 精准医学:临床表观遗传学,把握转化机会|治疗研究
  10. ubuntu下Xshell传输文件