常用类:Java比较器

一、Comparable与Comparator接口的使用

package com.hsy.commonClass.compare;import org.junit.Test;import java.util.Arrays;
import java.util.Comparator;/*** 一、说明:Java中的对象,正常情况下,只能进行比较:==  或  != 。不能使用 > 或 < 的*          但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。*          如何实现?使用两个接口中的任何一个:Comparable 或 Comparator** 二、Comparable接口与Comparator的使用的对比:*    Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小。*    Comparator接口属于临时性的比较。*****thor shkstart* @create 2019 下午 4:41*/
public class CompareTest {/*Comparable接口的使用举例:  自然排序1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。2.像String、包装类重写compareTo()方法以后,进行了从小到大的排列3. 重写compareTo(obj)的规则:如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。4. 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。在compareTo(obj)方法中指明如何排序*/@Testpublic void test1(){String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};//Arrays.sort(arr);System.out.println(Arrays.toString(arr));}@Testpublic void test2(){Goods[] arr = new Goods[5];arr[0] = new Goods("lenovoMouse",34);arr[1] = new Goods("dellMouse",43);arr[2] = new Goods("xiaomiMouse",12);arr[3] = new Goods("huaweiMouse",65);arr[4] = new Goods("microsoftMouse",43);Arrays.sort(arr);System.out.println(Arrays.toString(arr));}/*Comparator接口的使用:定制排序1.背景:当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序2.重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。*/@Testpublic void test3(){String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};Arrays.sort(arr,new Comparator(){//按照字符串从大到小的顺序排列@Overridepublic int compare(Object o1, Object o2) {if(o1 instanceof String && o2 instanceof  String){String s1 = (String) o1;String s2 = (String) o2;return -s1.compareTo(s2);}
//                return 0;throw new RuntimeException("输入的数据类型不一致");}});System.out.println(Arrays.toString(arr));}@Testpublic void test4(){Goods[] arr = new Goods[6];arr[0] = new Goods("lenovoMouse",34);arr[1] = new Goods("dellMouse",43);arr[2] = new Goods("xiaomiMouse",12);arr[3] = new Goods("huaweiMouse",65);arr[4] = new Goods("huaweiMouse",224);arr[5] = new Goods("microsoftMouse",43);Arrays.sort(arr, new Comparator() {//指明商品比较大小的方式:按照产品名称从低到高排序,再按照价格从高到低排序@Overridepublic int compare(Object o1, Object o2) {if(o1 instanceof Goods && o2 instanceof Goods){Goods g1 = (Goods)o1;Goods g2 = (Goods)o2;if(g1.getName().equals(g2.getName())){return -Double.compare(g1.getPrice(),g2.getPrice());}else{return g1.getName().compareTo(g2.getName());}}throw new RuntimeException("输入的数据类型不一致");}});System.out.println(Arrays.toString(arr));}}

常用类:Java比较器相关推荐

  1. JAVA常用类之比较器、System、BigInteger

    本文目录 JAVA常用类 Java比较器 `Comparable`接口 定制排序`java.util.Comparator` System类 BigInteger与BigDecimal JAVA常用类 ...

  2. java实验系统常用类,Java的常用系统类

    Java的常用系统类Tag内容描述: 1.Java语言与JBuilder应用初步 第六章 常用的Java系统类,本章要点,字符串类 数值(Number)类及其子类 数组类 集合类 Object类,字符 ...

  3. 【大数据Java基础-JAVA 数据结构04】java常用类(四)比较器以及其他类

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

  4. Java常用类——Java教案(六)

    文章目录 1. 与用户互动 Java程序入口 键盘录入 字符串录入 long类型录入 读取文件 next和nextline的区别 nextline使用时,自动跳过的问题. 2. 系统相关 System ...

  5. Java学习_Day 01(学习内容:尚硅谷常用类JAVA零基础P450-P460)

    P450 P451 String类的概述 P452 String的不可变性 package com.commonClass;import org.junit.Test;/** String的使用*/ ...

  6. Java高级--Java常用类

    Java常用类 字符串相关的类 String String的实例化方式 String常用方法 String与字符数组转换 字符数组--->字符串 字符串--->字符数组 String与字节 ...

  7. 第四周 Java语法总结_内部类_常用类_getclass_toStrong_equals_clone_Scanner_String_StringBuffer_Integer_集合_插入排序

    文章目录 20.内部类 1.格式 2.外部类访问内部类 3.局部内部类 4.匿名内部类 1)方法的形式参数是接口 2)关于匿名内部类在开发中的使用 3)方法的返回值是接口或抽象类型 16.常用类 1. ...

  8. 1.javaSe常用类

    一 常用类之String类 1 String类概述 1.1 String类简介 ​String类代表字符串类,java程序中所有的字符串文字都作为该类的实例,字符串不变,他们的值在创建之后不可被更改. ...

  9. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

最新文章

  1. java 两个值对换_java将两个整型变量值进行互换的几种实现方法
  2. 黑客渗透入门教程 第一课:粗暴的端口扫描
  3. C# API中的模型和它们的接口设计
  4. 新车模、新舵机、新体验
  5. 关于.NET前后台提示框的那点事
  6. AJAX GET的请求
  7. Android设计模式MVVM之DataBinding简单使用
  8. android adb 环境,Android安卓环境搭建及ADB常用命令
  9. 关于孵化器类型的创业公司-面试注意事项
  10. You have unstaged changes.
  11. MQ 之 RocketMQ
  12. Go语言与数据库开发:01-11
  13. 使用动态优先权的进程调度算法的模拟_我爱OS第12讲:系统调度
  14. 9.携程架构实践 --- 网站高可用
  15. 基于linux搭建zmodem服务
  16. VMware虚拟机安装黑群晖7.1
  17. u盘中毒数据怎么才能恢复
  18. 2022仿淘宝网首页html+css
  19. java变短加密解密算法_java----加密/解密常用算法
  20. 香港证券监管机构呼吁加密监管以应对欺诈行为

热门文章

  1. 盘点2010年娱乐圈十大重磅事件
  2. Android Display 之 HAL Gralloc
  3. 悼念贝娜齐尔#183;布托
  4. 刘可 寂寞才说爱歌曲试听 刘可 寂寞才说爱MP3歌词
  5. 芯片的分类以及厂商介绍
  6. 企业打造顶级研究院的最优路径是什么?
  7. TCP粘包、半包原理及解决方案
  8. zol 中关村在线是骗子网站,大家当心
  9. 1256:献给阿尔吉侬的花束
  10. android 开发 网易邮箱,怎么在Android客户端设置网易企业邮箱