Java中對象的比較(學習筆記)


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

①對象引用的比較("= ="運算符)

"= ="是將對象的引用進行比較,實質是比較兩個引用變量是否引用同一個對象。注意的點:字符串常量的比較時,JVM為同一個字符串常量只創建一個對象。

②對象內容的比較(equals()方法)

equals()方法是比較兩個對象的實際內容是否相同。注意的點:從源碼可知,equals()方法首先會做"= ="比較,只有當兩個變量引用的是不同對象時才進行內容的比較,節省一定的資源。

③自定義對象的比較(java.util.Comparator接口和java.lang.Comparable接口)

A.java.util.Comparator接口:

保持自定義類不變化,在此之外編寫一個比較算法(比較器類),它實現了Comparator接口。

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接口,代表着它被賦予了一種比較的能力。小型剮蹭事故中,兩位車主私下協商、賠償一下就完事兒了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM