常用类-Java比较器
一、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比较器的更多相关文章
- java 数据结构(四):java常用类四 比较器以及其他类
比较器 1.Java比较器的使用背景: Java中的对象,正常情况下,只能进行比较:== 或 != .不能使用 > 或 < 的但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要 ...
- 3.4常用类(java学习笔记)Math和Random
一.Math 这个类包含执行指数.对数.平方根法.三角函数等基本的数字运算. Math中还包含一些静态常量供我们调用. 如PI圆周率,E. 1.abs(),返回该数的绝对值. public class ...
- Java常用类学习笔记总结
Java常用类 java.lang.String类的使用 1.概述 String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String ...
- Java基础常用类深度解析(包含常见排序算法)
目录 一.工具类 1.1.工具类的设计 1.1.1.公共静态方法 1.2.单例模式 二.包装类 2.1.基本类型的包装类 2.1.1.Integer 2.1.1.1.Integer >> ...
- java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal
一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...
- java常用类 比较器/system/math/big
Java 比较器 自然排序:java.lang.Comparable 定制排序:java.util.Comparator 自然排序:java.lang.Comparable Comparable接口 ...
- Java基础 —— Java常用类
Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@&quo ...
- Java(三)常用类
@ 目录 Java常用类 一.字符串相关的类 1.String类 2.StringBuffer类 3.StringBuilder类 二.JDK8以前的日期时间API 1.java.lang.Syste ...
- 【Java基础】常用类
常用类 字符串相关的类 String类:代表字符串,使用一对 "" 引起来表示. public final class String implements java.io.Seri ...
随机推荐
- 攻防世界-MISC:stegano
这是攻防世界新手练习区的第五题,题目如下: 点击附件1下载,得到一个pdf文件,打开后内容如下: 把pdf文件里的内容复制到记事本上,发现一串A和B的字符串,不知道是什么(真让人头大) 参考一下WP, ...
- Bugku CTF练习题---加密---ok
Bugku CTF练习题---加密---ok flag:flag{ok-ctf-1234-admin} 解题步骤: 1.观察题目,发现规律 2.发现所有内容都是ook写的, 直接上网搜索一下原因,发现 ...
- RabbitMQ 3.9( 基础 )
1.认识MQ 1.1.什么是MQ? MQ全称:message queue 即 消息队列 这个队列遵循的原则:FIFO 即 先进先出 队列里面存的就是message 1.2.为什么要用MQ? 1.2.1 ...
- JS 一些概念
JS 内存机制 基本类型: String | Boolean | Undefined | Number | Nll | Symbol 数据保存在"栈"--先进后出. 数据类型: A ...
- Git使fork项目与源项目保持一致
操作如下: 1.先clone自己的fork项目到本地工程目录 git clone git@gitlab.alibaba-inc.com:riqi/{project}.git 2.进入该项目目录 ...
- linux系统平均负载高(load average)
系统平均负载高(load average) 问题现象 两个案例都是:系统平均负载高,但cpu,内存,磁盘io都正常 什么是系统平均负载 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进 ...
- 关键字 global和nonlocal
globale 表示从全局把一个变量(比如a)引入局部,后面的变量全是此变量a 使用 globale 变量名 # 全局变量一般是不能随意的修改的 # a = 10 # def func(): # ...
- Linux磁盘和文件系统知识总结
硬盘操作 为什么要给硬盘分区? 如果你需要在一块硬盘上用到多个文件系统,那么你就需要对硬盘进行分区,以便用不同的分区支持不同的文件系统.(但一个硬盘只能有一个分区表!)反过来说,如果你整块硬盘都用同样 ...
- H5如何实现唤起APP
前言 写过hybrid的同学,想必都会遇到这样的需求,如果用户安装了自己的APP,就打开APP或跳转到APP内某个页面,如果没安装则引导用户到对应页面或应用商店下载.这里就涉及到了H5与Native之 ...
- 使用VLL技术实现多家合作伙伴复用同一条链路做两端数据全透传
公司A当前租用一条10G跨市运营商光缆,自身业务只用到一半流量,为节省成本,寻求多家合作伙伴共用链路以达到财务需求 合作伙伴需求接入链路全透传,即光缆两端接入点端口逻辑直连 当前有三种方案可以实现上述 ...