一、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. kernel UAF && tty_struct

    kernel UAF && 劫持tty_struct ciscn2017_babydriver exp1 fork进程时会申请堆来存放cred.cred结构大小为0xA8.修改cred ...

  2. keepalived安装及配置文件详解

    一个执着于技术的公众号 在上一篇文章中,我们对Keepalived进行了简单入门学习: Keepalived入门学习 今天我们继续学习Keepalived服务. 一.安装Keepalived服务 两种 ...

  3. Swift初探01 变量与控制流

    Swift初探01 变量与控制流 输出"hello world"是几乎学习所有编程语言的第一课,这是程序员的情怀. 所以我们学习swift的第一步,就是输出一句"Hell ...

  4. MySQL闪回工具之binlog2sql

    一.binlog2sql 1.1 安装binlog2sql git clone https://github.com/danfengcao/binlog2sql.git && cd b ...

  5. typora的下载和基本的使用

    目录 typora的下载和基本的使用 typora的下载 typora基本的使用 选择自己喜爱的主题 创建标题 进入编程环境 改变文本样式 插入链接 插入图片 有序列表 无序列表 创建表格 单选框 表 ...

  6. 报‘galleryElements’

    是因为组件的data(){ //没有return{ }引起的 }

  7. Keil软件下用Jlink无法识别芯片

    Keil软件下用Jlink无法识别芯片 硬件:正点原子探索者 软件:keil J-Link固件版本:V9.40 J-Link V6.94b驱动:下载地址 跟着视频教程走,发现的第一个问题就是这个,记录 ...

  8. 一个全新的Vue拖拽特性实现:“移动”部分

    关于拖拽 CabloyJS提供了完备的拖拽特性,可以实现移动和调整尺寸两大类功能,这里对移动的开发进行阐述 关于调整尺寸的开发,请参见:拖拽:调整尺寸 演示 开发步骤 下面以模块test-party为 ...

  9. csv.reader(f)和f.readlines()、追加数据

    假如某个文档f中存储如下内容: 你好,中国. 1,2,3,4 共两行内容. 当你使用csv.reader(f),则会存储为如下形式: [['你','好','中','国'] ['1','2','3',' ...

  10. C#/VB.NET 在Word转PDF时生成目录书签

    当我们在转换Word文档到PDF格式时,想保留Word文档的标题作为PDF书签,那么应该如何操作呢?那么本文将以C#及VB.NET代码为例,介绍如何在Word转PDF时生成目录书签.下面是具体方法和步 ...