目錄
一. Comparable接口 與 compareTo方法
? ? ? ? 1.1 Comparable接口
? ? ? ? 1.2 compareTo方法的重寫
? ? ? ? ? ? ? ? 1.2.1 根據年齡進行比較
? ? ? ? ? ? ? ? 1.2.2 根據姓名進行比較
? ? ? ? 1.4 compareTo 方法?的使用
? ? ? ? 1.3 compareTo方法的缺點(重點)?
二. Comparator接口 與 compare方法
? ? ? ? 2.1 Comparator接口
? ? ? ? 2.2 compare 方法的重寫? ? ? ?
? ? ? ? ? ? ? ? 2.2.1 根據年齡進行比較
? ? ? ? ? ? ? ? 2.2.2 根據姓名進行比較
? ? ? ? 2.3 比較器的使用(重要)
三. Cloneable 接口
四. 淺拷貝 與 深拷貝
? ? ? ? 4.1 淺拷貝
? ? ? ? ? ? ? ? 4.1.1 實現 Cloneable接口
? ? ? ? ? ? ? ? 4.1.2?在實現類Person中重寫 clone 方法
? ? ? ? ? ? ? ? 4.1.3 實現淺拷貝
? ? ? ? 4.2 深拷貝?
? ? ? ? ? ? ? ? 4.2.1 實現Cloneable 接口
? ? ? ? ? ? ? ? 4.2.2 在實現類Money中重寫clone方法
? ? ? ? ? ? ? ? 4.2.3 實現 深拷貝
? ? ? ? 4.3 檢驗
? ? ? ? 4.4 深淺拷貝的畫圖理解
五. 總結
一. Comparable接口 與 compareTo方法
? ? ? ? 1.1 Comparable接口
Comparable接口中只存在一個 compareTo 抽象方法.
public interface Comparable<T>:
<T> 這是泛型, 之后會進行介紹.
public int compareTo(T o):
返回值是 int 型, 可以簡單理解為(并不準確, 根據實際情況來比較數據)
this.數據 > o.數據, 返回 正整數.?
this.數據 < o.數據, 返回 負整數.
this.數據 = o.數據, 返回0.
? ? ? ? 1.2 compareTo方法的重寫
在實現類中重寫 compareTo 抽象方法.
? ? ? ? ? ? ? ? 1.2.1 根據年齡進行比較
? ? ? ? ? ? ? ? 1.2.2 根據姓名進行比較
? ? ? ? 1.4 compareTo 方法?的使用
直接通過對象的引用 來訪問成員方法.
? ? ? ? 1.3 compareTo方法的缺點(重點)?
可以發現, compareTo方法的使用相對固定,??因為 調用者是通過直接調用compareTo方法來進行比較, 而不是通過傳入比較器.?從而導致無法在 調用方法的時候, 讓使用者來決定 根據什么來進行比較.
接下來, 我們來解決這個問題.
二. Comparator接口 與 compare方法
讓使用者決定 根據什么來進行比較.(傳入比較器)
? ? ? ? 2.1 Comparator接口
Comparator接口中有多個抽象方法, 但是在實現類中只需要重寫 compare 抽象方法.
(因為其他的抽象方法 在實現類中都會進行默認重寫)(調用的是Object類中的equals方法)
以下是 C知道的回答:
Comparator接口是Java提供的一個用于比較兩個對象大小的接口,它有多個抽象方法,包括compare、equals、reversed等方法。其中,compare方法是必須要實現的,用于比較兩個對象的大小。其他的抽象方法則是為了方便用戶使用而添加的,可以根據需要選擇性地實現。
在實現Comparator接口時,一般只需要重寫compare方法就可以了。因為其他抽象方法都有默認實現,如果不需要特別的功能,就可以直接使用默認實現。而且,如果在實現類中沒有重寫equals或reversed等方法,也不會影響到compare方法的正常使用。
? ? ? ? 2.2 compare 方法的重寫? ? ? ?
? ? ? ? ? ? ? ? 2.2.1 根據年齡進行比較
? ? ? ? ? ? ? ? 2.2.2 根據姓名進行比較
? ? ? ? 2.3 比較器的使用(重要)
這樣就靈活了, 調用者在使用的時候傳入比較器就可以調用指定的方法進行比較.
三. Cloneable 接口
?
Cloneable接口是一個空接口, 也叫做標記接口, 如果一個類實現了Clonable接口, 表示這個類可以被克隆.
四. 淺拷貝 與 深拷貝
使用 clone 方法來實現淺拷貝 與 深拷貝.
淺拷貝與深拷貝只與實現的代碼有關.??
? ? ? ? 4.1 淺拷貝
? ? ? ? ? ? ? ? 4.1.1 實現 Cloneable接口
表示Person這個類可以被克隆.
? ? ? ? ? ? ? ? 4.1.2?在實現類Person中重寫 clone 方法
在實現類中只是調用了Object類中的clone方法, 最終是通過 父類 Object中的clone方法來實現具體的克隆操作.
? ? ? ? ? ? ? ? 4.1.3 實現淺拷貝
?注意 clone方法的返回值是 Object 類型, 需要進行 向下轉型.
? ? ? ? 4.2 深拷貝?
在上述的淺拷貝中, 并沒有對person1中的 money.money 進行克隆, person1和 person2使用的都還是 原來的 money.money.
這時, 對 person2中的money.money進行修改, 會影響 person1中的money.money.?
這是不合理的, 此時需要進行深拷貝.
? ? ? ? ? ? ? ? 4.2.1 實現Cloneable 接口
表示Money這個類可以被克隆.????????
? ? ? ? ? ? ? ? 4.2.2 在實現類Money中重寫clone方法
? ? ? ? ? ? ? ? 4.2.3 實現 深拷貝
? ? ? ? 4.3 檢驗
? ? ? ? 4.4 深淺拷貝的畫圖理解
五. 總結
a. Comparable接口 與 compateTo方法 (較固定, 無比較器, 類的實現者實現好了, 調用者來使用)
b. Comparator接口 與 compare方法 (更靈活, 提供比較器, 調用者可以根據實際情況傳入比較器進行比較)
c. Cloneable接口 (空接口, 標記接口, 表示這個類可以被克隆)
d. clone方法(深淺拷貝, 深淺拷貝只和實現的代碼有關)?