[JAVASE] 類和對象(六) -- 接口(續篇)

目錄

一. 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方法(深淺拷貝, 深淺拷貝只和實現的代碼有關)?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16200.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16200.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16200.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯算法心得——李白打酒(加強版)

大家好&#xff0c;我是晴天學長&#xff0c;記憶化搜索&#xff0c;找到技巧非常重要&#xff0c;需要的小伙伴可以關注支持一下哦&#xff01;后續會繼續更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 2) .算法思路 1.memo三維表示記錄的結果 3&#xff09;.算法步驟 1…

slint esp32 tokio

源碼&#xff1a;https://github.com/xiaguangbo/slint_esp32_tokio cpu 是 esp32c2&#xff0c;屏幕是 ili9341&#xff0c;觸摸是 xpt2046&#xff0c;使用 spi 半雙工 不使用DMA&#xff08;esp-rs還沒支持&#xff09;&#xff0c;SPI 40M&#xff0c;240*320全屏刷新為1.5…

python文件IO之pickle 模塊讀寫對象數據

可以向一個文件中寫入字符串&#xff0c;讀取后也是讀取字符串形式&#xff0c;但是不能直接向文件中寫入像列表這樣的對象&#xff0c;需要 pickle 等模塊才行。 pickle 模塊介紹 pickle 模塊使用強大且有效的算法來進行序列化和反序列化。 序列化是指將一個對象轉換為能夠存…

前端面試手冊

前端面試手冊 崗位職責&#xff1a; 1&#xff0e;熟悉公司業務&#xff0c;能獨立高效高質地完成任務&#xff0c;負責功能的開發、測試、上線、維護&#xff1b; 2&#xff0e;負責推動、優化前端基礎架構、組件抽象&#xff0c;提升開發效率&#xff1b; 3&#xff0e;關…

四. TensorRT模型部署優化-模型部署的基礎知識

目錄 前言0. 簡介1. FLOPS2. TOPS3. HPC的排行&#xff0c;CPU/GPU比較4. FLOPs5. FLOPS是如何計算的6. CUDA Core vs Tensor Core總結參考 前言 自動駕駛之心推出的 《CUDA與TensorRT部署實戰課程》&#xff0c;鏈接。記錄下個人學習筆記&#xff0c;僅供自己參考 本次課程我們…

記一次Spark cache table導致的數據問題以及思考

目前在做 Spark 升級(3.1.1升級到3.5.0)的時候&#xff0c;遇到了cache table導致的數據重復問題&#xff0c;這種情況一般來說是很少見的&#xff0c;因為一般很少用cache table語句。 當然該問題已經在Spark3.5.1已經解決了,可以查看對應的 SPARK-46995和SPARK-45592 從以上的…

最小二乘法-超詳細推導(轉換為矩陣乘法推導,矩陣求導推導)

最小二乘法就是讓均方誤差最小。 下面是損失函數轉換為矩陣方式的詳解 如何讓其最小&#xff0c;在導數為0的地方取極小值。 問&#xff1a;導數為0的地方可能去極大值&#xff0c;也可能是極小值&#xff0c;憑什么說導數為0就是極小值&#xff1f; 答&#xff1a;因為使用…

android ndc firewall 命令type 黑名單 白名單差異

可以看到以白名單方式使能防火墻&#xff0c;fw_FORWARD fw_INPUT fw_OUTPUT 的操作是DROP或REJEDCT。即默認所有應用不允許上網&#xff0c;需要 XXX:/ # ndc firewall enable whitelist 200 0 Firewall command succeeded XXX:/ # iptables -t filter -L Chain INPUT (polic…

酷黑簡潔大氣體育直播自適應模板賽事直播門戶網站源碼

源碼名稱&#xff1a;酷黑簡潔大氣體育直播自適應模板賽事直播門戶網站源碼 開發環境&#xff1a;帝國cms 7.5 安裝環境&#xff1a;phpmysql 支持PC與手機端同步生成html&#xff08;多端同步生成插件&#xff09; 帶軟件采集&#xff0c;可以掛著自動采集發布&#xff0c;無…

【HSQL001】HiveSQL內置函數手冊總結(更新中)

1.熟悉、梳理、總結下Hive SQL相關知識體系。 2.日常研發過程中使用較少&#xff0c;隨著時間的推移&#xff0c;很快就忘得一干二凈&#xff0c;所以梳理總結下&#xff0c;以備日常使用參考 3.歡迎批評指正&#xff0c;跪謝一鍵三連&#xff01; 文章目錄 1.函數清單 1.函數清…

某某某加固系統分析

某某某加固系統內核so dump和修復&#xff1a; 某某某加固系統采取了內外兩層native代碼模式&#xff0c;外層主要為了保護內層核心代碼&#xff0c;從分析來看外層模塊主要用來反調試&#xff0c;釋放內層模塊&#xff0c;維護內存模塊的某些運行環境達到防止分離內外模塊&am…

網上比較受認可的賺錢軟件有哪些?眾多兼職選擇中總有一個適合你

在這個互聯網高速發展的時代&#xff0c;網上賺錢似乎成了一種潮流。但是&#xff0c;你是否還在靠運氣尋找賺錢的機會&#xff1f;是否還在為找不到靠譜的兼職平臺而苦惱&#xff1f; 今天&#xff0c;就為你揭秘那些真正靠譜的網上賺錢平臺&#xff0c;讓你的賺錢之路不再迷…

等保測評的流程是怎樣的

等保測評概述 等保測評&#xff0c;即信息安全等級保護測評&#xff0c;是指對信息系統安全性能進行等級評估的過程。其目的是通過評估系統的安全性能&#xff0c;為系統提供一個安全等級&#xff0c;并規定相應的保護措施。等保測評的流程通常包括定級、備案、安全建設、等級測…

Python--List列表

list列表?? 1高級數據類型 Python中的數據類型可以分為&#xff1a;數字型&#xff08;基本數據類型&#xff09;和非數字型&#xff08;高級數據類型&#xff09; ●數字型包含&#xff1a;整型int、浮點型float、布爾型bool、復數型complex ●非數字型包含&#xff1a;字符…

TypeScript-type注解對象類型

type注解對象類型 在TS中對于對象數據的類型注解&#xff0c;除了使用interface之外還可以使用類型別名來進行注解&#xff0c;作用類似 type Person {name: stringage: number }const p:Person {name: lily,age: 16 } type 交叉類型&模擬繼承 類型別名配合交叉類型…

docker創建的rabbitmq,啟動容器時報:Failed to create thread: Operation not permitted (1)

原因&#xff1a;docker內的用戶權限受限 啟動docker時加上參數 --privilegedtrue docker run --privilegedtrue -d --name rabbitmq --restartalways -p 5671:5671 -p 5672:5672 -p 15672:15672 -p 15671:15671 -p 25672:25672 -v /home/rabbitmq/data/:/var/rabbitm…

整合SSM框架筆記

整合SSM框架筆記 Spring5 Spring MVC MyBatis Druid MySQL Thymeleaf 感謝尚硅谷課程&#xff1a;B站課程 前言 單Spring框架時&#xff0c;是Java工程。 Spring與Spring MVC可以共用一個配置文件&#xff0c;也可以不共用一個&#xff0c;推薦不共用一個。 Spring與Sp…

Quartus 聯合 ModelSim 仿真 IP 核(RAM)

文章目錄 ModelSim 路徑設置創建 RAM進行仿真 本文主要介紹如何在包含 IP 核的 Quartus 項目中使用 Modelsim 進行仿真&#xff0c;本文基于 IP 核 RAM: 2-PORT&#xff0c;其他 IP 核類似。 ModelSim 路徑設置 點擊 Tools->Options 點擊 EDA Tool Options&#xff0c;設置…

BeanFactory、FactroyBean、ApplicationContext

BeanFactory Ioc容器、定義接口規范來管理spring bean的生命周期、依賴、注入&#xff0c;spring中有各種Ioc容器 FactroyBean 定制的工廠Bean&#xff0c;可以通過抽象工廠方式創建的bean&#xff0c;不納入spring的生命周期、依賴、注入特性&#xff0c;相當于spring給第三…

string OJ題

下面分享一下string做題心得 1. 明白字符串中存儲的數字為0 8 9與0 8 9 完全不同&#xff0c;字符0其實在串中存儲的是48&#xff0c;要有意識的轉化。字符串中如果存數字8&#xff0c;意味著存了BS&#xff08;退格&#xff09; 例如1&#xff1a; 算出結果為5&#xff0c;存…