1)詳細說明對象的比較方式有哪些?java
①對象引用的比較("= ="運算符)算法
"= ="是將對象的引用進行比較,實質是比較兩個引用變量是否引用同一個對象。注意的點:字符串常量的比較時,JVM爲同一個字符串常量只建立一個對象。數組
②對象內容的比較(equals()方法)函數
equals()方法是比較兩個對象的實際內容是否相同。注意的點:從源碼可知,equals()方法首先會作"= ="比較,只有當兩個變量引用的是不一樣對象時才進行內容的比較,節省必定的資源。spa
③自定義對象的比較(java.util.Comparator接口和java.lang.Comparable接口)code
A.java.util.Comparator接口:對象
保持自定義類不變化,在此以外編寫一個比較算法(比較器類),它實現了Comparator接口。blog
Comparator接口定義了一個compare(T o1,T o2)方法:比較用來排序的兩個參數。排序
/*@return o1小於、等於或者大於o2,分別返回負整數、零或者正整數。*/
此時,compare()方法的具體實現有了,再將Comparator傳遞給Collections.sort或Arrays.sort方法來實現排序。接口
B.java.lang.Comparable接口:
須要對自定義類進行改變,即實現Comparable接口,讓它具備比較的功能。
Comparable接口定義了一個compareTo(T o)方法:比較此對象與指定對象的順序。
/*@return 該對象小於、等於或者大於o,分別返回負整數、零或者正整數。*/
Comparable接口強行對實現它的每一個類的對象進行總體排序,實現此接口的對象列表(和數組)能夠經過Collection.sort或Arrays.sort進行自動排序。
例子能夠觀察,TreeSet構造函數中的TreeSet(Comparator<? super E> comparator)和TreeSet()。
2) 用一個生活中的對象來生動地說明Comparator和Comparable的區別。
在英語中,tor是常見的人稱後綴,visi-tor(訪問者),crea-tor(創造者)...我的認爲Comparator就像是車險公司(第三方),重大的複雜的交通事故中保險公司要出人、出力去評估主要責任、次要責任等細則來劃分保險金額。
而able在英語中,表示能力、可以。一個類實現了Comparable接口,表明着它被賦予了一種比較的能力。小型剮蹭事故中,兩位車主私下協商、賠償一下就完事兒了。