一、Comparable接口

Java中的对象,正常情况只能进行比较 == 或 !=不能使用
> 或 < 的,但是在实际开发中有需要进行对象的比较
comparable接口的使用举例:
1.像String、包装类等实现了comparable接口,重写了comparableTo(obj)方法,给出了比较两个对象大小的方式
2.像String 、包装类重写comparableTo(obj)方法以后,进行了从小到大的排列
3.重写comparableTo(obj)的规则
如果当前对象this大于形参对象obj,则返回正整数
如果当前对象this小于形参对象obj,则返回负整数
如果当前对象this等于形参对象obj,则返回零
4.对于自定义类来说,如果需要排序,我们可以让自定义类实现comparable接口,重写compareTo()
在comparableTo(obj)方法中指明如何排序
测试单元代码如下:

点击查看代码
@Test
public void test1(){
Goods[] arr1 = new Goods[5];
arr1[0] = new Goods("lenovoMouse",35);
arr1[1] = new Goods("huaweiMouse",65);
arr1[2] = new Goods("dellMouse",43);
arr1[3] = new Goods("xiaomiMouse",21);
arr1[4] = new Goods("mircsoftMouse",65);
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));
}

Goods类代码如下:

点击查看代码
package com.Tang.StringDay02;

public class Goods implements Comparable{
private String name;
private double price;
public Goods() {
}
public Goods(String name, int price) {
this.name = name;
this.price = 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;
} @Override
public String toString() {
return "name='" + name + '\'' +
", price=" + price + '\n';
}
//指明商品比较大小的方式:按价格从低到高排序,价格相同按名称从高到低排
@Override
public int compareTo(Object o) {
if (o instanceof Goods){//判断是不是一个商品
Goods goods = (Goods)o;//是商品的就进行转换
//方式一:
if(this.price > goods.price)
return 1;
else if(this.price < goods.price)
return -1;
else
return -this.name.compareTo(goods.name);
//按价格排序方式二
// return Double.compare(this.price,goods.price); }
throw new RuntimeException();
} }

运行结果图

二、Comparator实现定制排序

点击查看代码
@Test
public void test3(){
Goods[] arr1 = new Goods[5];
arr1[0] = new Goods("lenovoMouse",35);
arr1[1] = new Goods("huaweiMouse",65);
arr1[2] = new Goods("dellMouse",43);
arr1[3] = new Goods("huaweiMouse",21);
arr1[4] = new Goods("mircsoftMouse",65);
//指明商品比较大小的方式:按名称从低到高排序,名称相同按价格从高到低排
Arrays.sort(arr1, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Goods && o2 instanceof Goods){
Goods g1 = (Goods) o1;
Goods g2 = (Goods) o2;
if(g1.getName() == g2.getName()){
return -Double.compare(g1.getPrice(),g2.getPrice());
}
else{
return g1.getName().compareTo(g2.getName());
}
}
throw new RuntimeException("输入数据类型不一致");
}
});
System.out.println(Arrays.toString(arr1));
}

运行结果图

常用类-Java比较器的更多相关文章

  1. java 数据结构(四):java常用类四 比较器以及其他类

    比较器 1.Java比较器的使用背景: Java中的对象,正常情况下,只能进行比较:== 或 != .不能使用 > 或 < 的但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要 ...

  2. 3.4常用类(java学习笔记)Math和Random

    一.Math 这个类包含执行指数.对数.平方根法.三角函数等基本的数字运算. Math中还包含一些静态常量供我们调用. 如PI圆周率,E. 1.abs(),返回该数的绝对值. public class ...

  3. Java常用类学习笔记总结

    Java常用类 java.lang.String类的使用 1.概述 String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String ...

  4. Java基础常用类深度解析(包含常见排序算法)

    目录 一.工具类 1.1.工具类的设计 1.1.1.公共静态方法 1.2.单例模式 二.包装类 2.1.基本类型的包装类 2.1.1.Integer 2.1.1.1.Integer >> ...

  5. java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal

    一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...

  6. java常用类 比较器/system/math/big

    Java 比较器 自然排序:java.lang.Comparable 定制排序:java.util.Comparator 自然排序:java.lang.Comparable  Comparable接口 ...

  7. Java基础 —— Java常用类

    Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@&quo ...

  8. Java(三)常用类

    @ 目录 Java常用类 一.字符串相关的类 1.String类 2.StringBuffer类 3.StringBuilder类 二.JDK8以前的日期时间API 1.java.lang.Syste ...

  9. 【Java基础】常用类

    常用类 字符串相关的类 String类:代表字符串,使用一对 "" 引起来表示. public final class String implements java.io.Seri ...

随机推荐

  1. vite创建vue3项目 vueconfig配置及其备注

    import vue from '@vitejs/plugin-vue' const path = require('path') // vite.config.js # or vite.config ...

  2. 自学java的困难

    在自学的一些基础阶段,倒是没什么太大的问题,但是在想搞一个项目的时候,就显得手足无措了.因为,很多博主讲的的那些,都行需要一定的条件,比如前端框架,数据库的数据等等. 简单一点的SSM框架整合相对简单 ...

  3. 漫谈 HTTP 连接

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 本文首先会 HTTP 的特点和优缺点,然后会详细介绍 HTTP 长连接和短连接的连接管理,通过 ...

  4. 踩到一个关于分布式锁的非比寻常的BUG!

    你好呀,我是歪歪. 提到分布式锁,大家一般都会想到 Redis. 想到 Redis,一部分同学会说到 Redisson. 那么说到 Redisson,就不得不掰扯掰扯一下它的"看门狗&quo ...

  5. drools中Fact的equality modes

    一.equality modes介绍 在drools中存在如下2种equality modes. 1.identity模式 identity:这是默认的情况.drools引擎使用IdentityHas ...

  6. Elasticsearch(es)介绍与安装

    ### RabbitMQ从入门到集群架构: https://zhuanlan.zhihu.com/p/375157411 可靠性高 ### Kafka从入门到精通: https://zhuanlan. ...

  7. consul系列文章02---替换掉.netcore的配置文件

    如果是开发微服务的项目,多个服务的配置管理起来比较麻烦,需要集中管理,也就是需要有配置中心: consul集成配置中心的思路:读取配置文件时不在从本地的应用中读取,而是从consul的KEY/valu ...

  8. redis-server.exe双击闪退

    转自 https://blog.csdn.net/qq_40361770/article/details/80454248 解决方法: 1-win+R 打开命令行 2-cd至redis目录,例如 D: ...

  9. iview 酸爽debug: subMenu默认选中无效的解决方法

    一. 在iview中写一个submenu <Col span="3" type="flex" v-if="showCids"> ...

  10. CabloyJS V3.2.0支持Socket IO

    CabloyJS v3.2.0引入了Socket IO,并且实现了统一的在线推送和离线推送机制 效果演示 1. IM 用户向系统发送一条消息,系统通过websocket在线通道向用户推送一条回复 2. ...