天天看點

對象的比較

1)詳細說明對象的比較方式有哪些?

0.1 == 比較對象的引用位址是否相等
  0.2 equals 對象 預設是引用位址的比較,詳情可見Object的equals,
  String對象中equals方法是對object方法的重寫!一般情況下,将equals() 和hashcode()           

協同起來,進行對象的比較!

注意:0.1equals方法相等,hashcode一定相等,hashode相等,equals不一定相等!會存在hash沖突的情況
           0.2 map的key存儲自定義對象或者set存儲自定義對象時,一定要重寫,hashcode和equals

  0.3   内部比較:(自營性質 )  Comparable   比較方法是 compareTO
  0.4   外部比較:  (平台性質---可看成工具類)   Comparator 比較方法是 compare
                      

2) 用一個生活中的對象來生動地說明Comparator和Comparable的差別。

Comparable 是 java.lang包 , Comparator是java.util包 ?為什麼?

Comparable 對象自身之間進行比較,接口的實作是在類的内部, 如:Integer 的排序 是以放在lang包下

Comparator 是第三方的比較,Comparator接口的實作是在類的外部 如何:集合的排序 Collections.sort()

如果比較的方法隻要用在一個類中,用該類實作Comparable接口就可以。

如果比較的方法在很多類中需要用到,就自己寫個類實作Comparator接口,這樣當要比較的時候把實作了Comparator接口的類傳過去就可以,省得重複造輪子。這也是為什麼Comparator會在java.util包下的原因。

Comparable 是自身具有某種能力,将自身的屬性與他人進行比較, Comparator是在第三方(平台、上帝)視角上,對比兩個人的某種或者某些屬性

生活中的例子: 小張同學想知道自己比其他的同學的成績 高低?小張同學站在自身的視角,此時就用Comparable

老師想知道全部同學的成績或者身高的高低?老師站在第三方的視角,此時就用Comparator           
上一篇: 集合轉數組