欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java比较器概述即代码讲解实现

发布时间:2025/3/15 java 22 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java比较器概述即代码讲解实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

创建商品类用来测试比较

package BaiYSExer3;/*** 商品类* @author Baiysmart* @create 2020-03-19 11:08*/ public class Goods implements Comparable {private String name;private double price;public Goods() {}public Goods(String name, double 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;}@Overridepublic String toString() {return "Goods{" +"name='" + name + '\'' +", price=" + price +'}';}//重写compareTo方法//指明商品比较大小的方式:按照价格从低到高排序,再按产品名称从低到高排序@Overridepublic int compareTo(Object obj) {//方式一if (obj instanceof Goods){Goods goods = (Goods) obj;if(this.price>goods.price){return 1;}else if(this.price<goods.price){return -1;}else{// return 0;//按照产品名称从低到高进行排序return this.name.compareTo(goods.name);//按照产品名称从高到低进行排序,加负号的方式实现增序降序的转变//return -this.name.compareTo(goods.name);}}throw new RuntimeException("传入的数据类型不一致!!!");} }

写测试类测试比较器

测试类中有比较器的讲解说明和比较
package BaiYSExer3;import org.junit.Test;import java.util.Arrays; import java.util.Comparator;/*** @author Baiysmart* @create 2020-03-19 10:40*/ /* 一,说明:在Java中的对象,正常情况下,只能进行比较:== 或!=。不能使用> 或 <,但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。如何实现?使用两个接口中的任何一个:Comparable 或 Comparator 二,Comparable接口与Comparator的使用的对比:Comparable接口的方式一旦指定,保证Comparable接口实现类的对象在任何位置都可以比较大小。Comparator接口属于临时性的比较。Comparable接口的使用举例: 属于自然排序1,像String,包装类等实现了Comparable接口,重写了CompareTo(obj)方法,给出了比较两个对象的方法2,像String,包装类重写compareTo()方法以后,进行了从小到大的排序3,介绍一下重写compareTo(obj)的规则:如果当前对象this大于形参对象obj,则返回正整数如果当前对象this小于形参对象obj,则返回负整数如果当前对象this等于形参对象obj,则返回零4,对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTO()方法,在compareTo(obj)方法中指明如何排序*/public class CompareTest {@Testpublic void test1() {String[] arr = new String[]{"aa", "pp", "bb", "ww", "dd"};Arrays.sort(arr);String s = Arrays.toString(arr);System.out.println(s);//[aa, bb, dd, pp, ww]}@Testpublic void test2() {Goods[] arr = new Goods[4];arr[0] = new Goods("ygmmd", 198);arr[1] = new Goods("ygppp", 289);arr[2] = new Goods("ygshl", 978);arr[3] = new Goods("wqmmd", 978);Arrays.sort(arr);System.out.println(Arrays.toString(arr));}/*Comparator接口的使用:属于定制排序1,背景当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码;或者实现了java.lang.Comparable接口的排序规则不适合当前的操作那么可以实现考虑使用Comparator的对象进行排序2,重写compare(objec o1,Object o2)方法,比较o1,o2大小:如果方法返回正整数,则表示o1>o2;如果返回0,表示相等返回负整数,表示o1<o2*/@Testpublic void test3() {String[] arr = new String[]{"KK", "GG", "MM", "AA", "PP"};//按照字符串从大到小顺序排列Arrays.sort(arr, new Comparator() {@Overridepublic int compare(Object obj1, Object obj2) {if (obj1 instanceof String && obj2 instanceof String) {String s1 = (String) obj1;String s2 = (String) obj2;//默认是从小到大,加上负号转变为从大到小return -s1.compareTo(s2);}throw new RuntimeException("输入的数据类型不一致");}});System.out.println(Arrays.toString(arr));}@Testpublic void test4() {Goods[] arr = new Goods[4];arr[0] = new Goods("ygmmd", 198);arr[1] = new Goods("ygppp", 289);arr[2] = new Goods("ygshl", 978);arr[3] = new Goods("wqmmd", 978);Arrays.sort(arr, new Comparator() {@Overridepublic int compare(Object obj1,Object obj2){//指明商品比较大小的方式//按照产品名称从低到高排序,再按照价格从高到低排序if (obj1 instanceof Goods&&obj2 instanceof Goods){Goods g1 = (Goods) obj1;Goods g2 = (Goods) obj2;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比较器概述即代码讲解实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。