Java比较器概述即代码讲解实现
生活随笔
收集整理的這篇文章主要介紹了
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比较器概述即代码讲解实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web API Help Page In
- 下一篇: java--GC Root有哪些