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