Comparable类
说明: Java中的对象,正常情况下,只能进行比较: ==或!= 。不能使用>或<的
但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。如何实现?使用两个接口中的任何一个: Comparable 或Comparator
1. 像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,
给出了比较两个对象大小的方式
2. 像String、包装类重写compareTo()方法以后,进行了从小到大的排列
3. 重写compareTo(obj)的规则:
如果当前对象this大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。
代码如下:
public class StartApplication {public static void main(String[] args) {String[]str=new String[]{"CC","BB","DD","AA","GG"};Arrays.sort(str);System.out.println(Arrays.toString(str));Goods[]goods=new Goods[5];goods[0]=new Goods("huaweiMouse",64);goods[1]=new Goods("xiaomiMouse",18);goods[2]=new Goods("ipodMouse",56);goods[3]=new Goods("lenovoMouse",54);goods[4]=new Goods("reishaMouse",54);Arrays.sort(goods);System.out.println(Arrays.toString(goods));} }
public class Goods implements Comparable{private String name;private double price;public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Goods{" +"name='" + name + '\'' +", price=" + price +'}';}public Goods(String name, double price) {this.name = name;this.price = price;}public Goods() {}@Overridepublic int compareTo(@NotNull Object o) {if(o instanceof Goods){Goods good= (Goods) o; // 方式一if(this.price>good.price){return 1;}else if(this.price<good.price){return -1;}else{ // return 0;return this.name.compareTo(good.name);} // 方式二 // return Double.compare(this.price,good.price);} // return 0;throw new RuntimeException("传入的数据不一致");} }
结果:
[AA, BB, CC, DD, GG]
[Goods{name='xiaomiMouse', price=18.0}, Goods{name='lenovoMouse', price=54.0}, Goods{name='reishaMouse', price=54.0}, Goods{name='ipodMouse', price=56.0}, Goods{name='huaweiMouse', price=64.0}]
Comparable类相关推荐
- java tree类子项的添加和删除_使用Java实现二叉树的添加,删除,获取以及遍历...
二叉树节点的声明: static final class Entry>{ //保存的数据 private T item; //左子树 private Entry left; //右子树 priv ...
- 集合框架-Comparator和Comparable的区别
Comparator也叫外部比较器,常在使用Collections工具类进行集合排序的时候使用.外部比较器Comparator可以理解为一个专用的比较器,当集合中的对象不支持自比较或者比较的功能不能满 ...
- Java-TreeSet与Comparable的详讲与实现
目录 初识TreeSet: 一.深入了解TreeSet的"有序" 1.1 排序的分类: 1.1.1 利用系统定义的类的存储原理如下: 1.1.2 自定义类"排序&qu ...
- java中Comparable的使用
Comparable是个排序接口,若一个类实现了该接口,那么该类的数组和列表就可以通过Collections.sort或Arrays.sort进行自动排序.该接口中的只有一个compareTo(T o ...
- Java 类和对象——抽象类、接口、Object类
本文章继续来介绍类和对象的知识.重点介绍抽象类和接口,Object类只做简单介绍. 现在,定义一个Shape类(形状类),当不同的对象去调用的时候,就会画出不同的图形,使用圆这个对象去调用,就会画出⚪ ...
- Java学习笔记(二一)——Java 泛型
[前面的话] 最近脸好干,掉皮,需要买点化妆品了. Java泛型好好学习一下. [定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个 ...
- 《head first java 》读书笔记(四)
Updated 2014/04/09 P518--P581 <数据结构> ArrayList不能排序:TreeSet以有序状态保持并可防止重复.HashMap可用成对的name/value ...
- 《CLR Via C# 第3版》笔记之(十五) - 接口
接口(interface)和类(class)是CLR中应用最为广泛的两个概念.灵活的应用接口,可以构造出各种经典的设计模式. 接口的语法并不复杂,本篇主要记录接口中一些容易忽略的地方,以及如何更好的使 ...
- Java TreeMap 源码解析
继上篇文章介绍完了HashMap,这篇文章开始介绍Map系列另一个比较重要的类TreeMap. 大家也许能感觉到,网络上介绍HashMap的文章比较多,但是介绍TreeMap反而不那么多,这里面是有原 ...
最新文章
- Oracle Dataguard 主备库的切换方法
- 《星球大战:前线2》预告片发布
- 【转】Monkey测试6-Monkey Test Log
- python 处理 json 四个函数dumps、loads、dump、load的区别
- anaconda moviepy_Win10配置anaconda和jupyter
- 【数字逻辑 Verilog】全面剖析数据选择器——从基础到拓展,从理论到设计的实现,从表面到本质
- python生成1到100的列表_python列表生成式与列表生成器的使用
- php中datetime,珍藏 PHP中DateTime的常用方法
- 计算机网络课设之TCP通讯录
- DM7数据库ODBC的配置详解
- 联想g510升级换什么cpu好_联想G510笔记本完全拆机指南(图解)
- DSIS多媒体信息发布系统液晶广告机管理软件
- csm测试用例思维导图_架构思维导图
- 工控变成用c语言还是plc,浅析工控机与PLC的区别
- java中string是什么意思_java中string什么意思
- opencv图片保存0字节_openCV将8bit(1像素对应8bit)图像保存为1bit(1像素对应1bit)...
- 直角坐标系与极坐标系了解与转换
- 政务服务一网通办建设方案(ppt)
- 在带有触控 ID 的妙控键盘上无法正常使用触控 ID的解决方法
- matlab 微分符号,Matlab 符号微积分