天天看點

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

目錄

1 同一性比較

2 相等性比較

3 需要比較對象之間的大小關系

   3.1 Comparable接口比較(兩個對象)

        3.1.1 已經實作了Comparable接口的類(例如下面的String類)

        3.1.2 自己定義類并實作Comparable接口

        3.1.3 正确的重寫compareTo方法

        3.1.4 小結

   3.2 Comparator接口(比較器)比較(三個對象)

        3.2.1 使用要求

        3.2.2 compare方法的重寫

        3.2.3 正确的調用compare方法(需要三個對象(引用))

4 Comparator的使用場景    

5 三種比較方式小結

1 同一性比較

        對象的引用使用 == 比較的是同一性,即位址是否相同

        1)引用1 == 引用2,表示兩個引用指向同一個對象

        2)特例,引用1  == 引用2 == null 表示兩個引用不指向任何對象

2 相等性比較

        使用equals方法進行比較,前提是該對象類重寫了equals方法,否則會調Object的equals方法還是比較的同一性

        例如String類的比較,str1.equals(str2),如果傳回值為true表示兩種内容相等(str1 == str2 是一種特殊的相等性情況)

3 需要比較對象之間的大小關系

        Java語言有一個規範,要求類實作Comparable或Comparator接口,接口繼承Comparable或Comparator接口才具備可比較的能力。

   3.1 Comparable接口比較(兩個對象)

        3.1.1 已經實作了Comparable接口的類(例如下面的String類)

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

        至于下面的compareTo方法傳回值是什麼,代表什麼含義,讀者請自行檢視方法源碼

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

        3.1.2 自己定義類并實作Comparable接口

        定義一個Class類實作Comparable接口具備了比較能力,并且正确的重寫了compareTo方法,其中泛型中的Person表示compareTo方法傳入的對象時Person類。

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

         我們自定義的比較大小的規則為:哪個Person類的level屬性值大就代表哪個對象大

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

        3.1.3 正确的重寫compareTo方法

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

        3.1.4 小結

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

   3.2 Comparator接口(比較器)比較(三個對象)

        3.2.1 使用要求

         要比較的兩個對象是同一個類

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

        3.2.2 compare方法的重寫

        用到第三個類去實作Comparator接口并重寫compare方法

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

        3.2.3 正确的調用compare方法(需要三個對象(引用))

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

4 Comparator的使用場景    

        1) 要比較的兩個對象類,不具備自然順序,即沒實作Comparable接口

        2) 要比較的兩個對象具備自然順序,但這個順序不符合我們的比較要求  

        以下給出第二種情況的例子 

        如下例我們想要的結果是甲 < 乙,但是String類雖然實作了Comparable接口(有了自然順序),但是不符合我們的比較要求

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

        是以我們定義一個額外的類去實作Comparator接口

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結
Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結

5 三種比較方式小結

Java之對象比較1 同一性比較2 相等性比較3 需要比較對象之間的大小關系4 Comparator的使用場景    5 三種比較方式小結