關(guān)于Java中Compare的點(diǎn)點(diǎn)滴滴

Java中的比較方法有很多,我們來說明一下。

一.有關(guān)類自定義的比較方法

1.String的compareTo()方法

compareTo()方法用于兩種方式的比較:

  1. 字符串與對(duì)象的比較
  2. 按字典順序比較兩個(gè)字符串
    語法格式:
int compareTo(Object o)                          //o -- 要比較的對(duì)象
int compareTo(String anotherString) //anotherString -- 要比較的字符串

返回值類型
返回值為整型,通過每個(gè)字符的一一比較,如果第一個(gè)字符和參數(shù)的第一個(gè)字符相等,那么第二個(gè)字符和參數(shù)做比較,依次類推,直到不等為止,返回該字符的ASCII碼差值,如果兩個(gè)字符串不一樣長,可是對(duì)應(yīng)的字符又完全一樣那么返回字符串的長度差值。

  • 如果兩個(gè)字符串相等,那么返回0
  • 如果此字符串小于字符串參數(shù),那么返回小于0的數(shù)
  • 如果此字符串大于字符串參數(shù),那么返回大于0的數(shù)

二.自定義排序類

我們知道,當(dāng)我們想對(duì)集合或者數(shù)組進(jìn)行排序的時(shí)候,我們有兩種方法。

  1. 實(shí)現(xiàn)Comparator接口
  2. 實(shí)現(xiàn)Comparable接口
(一).實(shí)現(xiàn)Comparator比較器接口

Comparator位于java.util包下。

public interface Comparator<T> {
    int compare(T o1, T o2);
  //這里我怎么理解呢,我們可以把o1看成右邊的元素,02看成左邊的元素,
  //如果返回值 大于 0 :那么不會(huì)調(diào)換位置
  //如果返回值 等于 0 : 那么不會(huì)調(diào)換位置
  //如果返回值 小于 0 :那么調(diào)換兩者位置
}

通常我們有以下的使用方法:

public class Compare {
    //定義一個(gè)內(nèi)部類
    static class  ComparatorTest implements java.util.Comparator<Integer>{
        @Override
        public int compare(Integer o1, Integer o2) {
            return o1 - o2;
        }
    }
    //主測(cè)試函數(shù)
    public static void main(String[] args) {
        LinkedList<Integer> integers = new LinkedList<>();
        integers.add(1);
        integers.add(2);
        integers.add(3);
        integers.add(0);
        /*第一種寫法,匿名類*/
        integers.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer t1, Integer t2) {
                return -1;
            }
        });
        /*第二種寫法,lambda表達(dá)式*/
        integers.sort((o1, o2) -> o1 - o2);
        /*第三中寫法,內(nèi)部類*/
        integers.sort( new ComparatorTest());
        integers.stream().forEach(System.out::println);
    }
}
(二).實(shí)現(xiàn)Comparable比較器接口

如果想讓一個(gè)類有自比較的行為,那么就可以實(shí)現(xiàn)這個(gè)接口從而變成可比較類,而且接口里面有一個(gè)方法需要實(shí)現(xiàn),那就是compareTo方法。

class MyEntity implements Comparable<MyEntity>
{
    private int val;
    @Override
    public int compareTo(MyEntity o) {
        if(this.val < o.val)return -1;
        if(this.val > o.val)return 1;
        return 0;
    }
}

這個(gè)我們比較容易理解,我們發(fā)現(xiàn)前者我們通常會(huì)用的會(huì)比較多。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容