最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基礎(chǔ)之toString的序列化 匿名對象 復雜度精解

 更新時間:2021年09月26日 15:55:24   作者:愛內(nèi)卷的王同學  
序列化即為把內(nèi)存中的對象轉(zhuǎn)換為字節(jié)寫入文件或通過網(wǎng)絡傳輸?shù)竭h端服務器,本章節(jié)將帶你了解Java toString的序列化 匿名對象 復雜度,需要的朋友可以參考下

toString的序列化、匿名對象、復雜度

序列化

toString 方法的原理就是序列化,他可以幫助我們講一個抽象的對象變得具體,譬如把對象里面的名字、年齡、身高等信息具象為字符串。(總之,序列化:將對象轉(zhuǎn)化為字符串;反序列化:將字符串轉(zhuǎn)化為對象)。

匿名對象

匿名對象適用于只想使用一次的情況,因為匿名對象是沒有引用的,每次用都要重新new 一遍對象,很麻煩。

class Person {
    public void eat{
        //略
    }
    public void show{
        //內(nèi)容略
    }
}
//主函數(shù)略寫
new Person.eat();//此即為匿名函數(shù)的寫法
new Person.show();

復雜度

復雜度是衡量一個計算機運行效率的東西,分為時間復雜度和空間復雜度,空間復雜度衡量的是一個程序所占用儲存空間,時間復雜度衡量的是一個程序的運行時間(當然,不是那種真實的時間),但是當下,計算機的內(nèi)存空間已經(jīng)發(fā)展到了一定的高度,所以不需要再去關(guān)注這個東西了。

時間復雜度

我們是不可能能真正去測算一個程序的執(zhí)行時間的,因為,每個計算機的性能不同,執(zhí)行的時間快慢也不同。一個算法所花費的時間是正比于語句的執(zhí)行次數(shù)的。

所以,算法中的基本操作的執(zhí)行次數(shù),為算法時間復雜度。

以下為時間復雜度示例,一起來具體分析。

fq4IVU.jpg

上面已經(jīng)講過了,時間復雜度的定義就是 算法中的基本操作的執(zhí)行次數(shù),所以我們算一下上面這段代碼每段語句的執(zhí)行次數(shù)就可以求出(上面的圖片已經(jīng)標注),所以這段代碼的時間復雜度為:N^2 + 2N + 10。(1 太小,可以忽略)。

大O的漸進表示法

用參數(shù) 1 取代式子中的常數(shù)項在修改后函數(shù)中只保留最高項如果最高項的系數(shù)不為 1 ,那么就把他前面的系數(shù)去掉

(其實歸根到底就是 ,對于一個有不同項的式子(譬如:N^2+2N+10 變 N^2) ,去掉最高項以外的其他項 , 去掉最高項的常數(shù),但是如果其時間復雜度僅僅是一個常數(shù),直接轉(zhuǎn)為O(1)即可)

時間復雜度的分類

時間復雜度被分為三類(可以以數(shù)組的查找為例)

第一類:最好情況(1次找到,即假定我們要找的是數(shù)組的第一個元素)

第二類:最壞情況(最后一個找到,即假設(shè)我們要找的是數(shù)組的最后一個元素,N次)

第三類:平均情況(中間找到,即假設(shè)我們要找到的是數(shù)組的中間元素,N/2次)

但是,平時我們嘴里面常說的時間復雜度其實是最壞的情況,所以,以上以查找數(shù)組為例的時間復雜度應該為:O(N)。

計算時間 復雜度的方法

既要看程序的執(zhí)行次數(shù),也要看程序的具體的執(zhí)行內(nèi)容而定。

示例 1

fvahBd.jpg

如上圖,要求計算冒泡排序的時間復雜度。這里要算出 最好情況和最壞情況 ,最好情況也就是順序,一次性的只有圖中的第一個框子的程序進行執(zhí)行,第二個框子里的程序根本沒執(zhí)行所以不納入考慮范圍。因此,最好情況為:O(N)。

但是最壞情況就是逆序,從大到小的那種,這樣的話,第二個框子必須每次都執(zhí)行。即為:N(N-1),因此根據(jù)剛剛上面的規(guī)則,去掉最高項以外的其他項之后,最壞情況為:O(N^2)。

示例 2

fvjP7F.jpg

如上圖,是二分查找的代碼,這個代碼要計算它的時間復雜度,就必須知道里面循環(huán)執(zhí)行的次數(shù),而下圖,以四個元素的數(shù)組為例進行查找,最終發(fā)現(xiàn)規(guī)律(注意,這里要算的時間復雜度考慮最壞情況,也就是說我們不管數(shù)組里有幾個元素查找的都是最后一個元素)。如圖,分支處的判斷與賦值其實就是進入循環(huán)里面所做的事情,也就是說有幾個分支,循環(huán)就執(zhí)行了幾次,下圖那個,四個元素,三個分支,所以,循環(huán)執(zhí)行了三次,其時間復雜度也是 3 。最后的到用n 表示出來的n ,但是下圖中的值其實并不準確,根據(jù)上面說過的原理,我們可以略去 1 那個常數(shù)。然后log 里面的 2 也是能夠去掉的,用 log n 特指 二分查找的時間復雜度。

fvXSde.jpg

示例3

計算遞歸的時間復雜度,公式:時間復雜度 = 遞歸的次數(shù) * 遞歸執(zhí)行的次數(shù)。

//階乘遞歸
long factorial(int n) {
    return n < 2 ? n :factorial(n-1)*n;
}//求此段代碼的時間復雜度
//  n     a
//  2     2*1
//  3     3*1
//綜上,找出的規(guī)律說明輸入多少
//時間復雜度就是多少。
//因此,答案為O(N)
//計算斐波那契數(shù)列的時間復雜度
int fibonacci(int n) {
    return n < 2 ? n :fibonacci(n-1)+fibonacci(n-2);
}
//

空間復雜度

空間復雜度不是看程序占多少字節(jié),這個是沒有意義的,但是如果我們要計算空間復雜度的話,其實求的是變量的個數(shù)。

fxcJ78.jpg

如上圖,冒泡排序的空間復雜度是O(1),之所以是這樣子的是因為函數(shù)參數(shù)里面的那個 int[] array,他其實并不算在內(nèi),因為這是一個必須空間,就是說,要存這N 個數(shù)據(jù)就必須是要開辟的,這種必須空間不納入考慮范圍。但是循環(huán)里面的那個 sort 變量是納入考慮范圍,因為這才是實實在在創(chuàng)建的變量,又因為這個變量在for 循環(huán)里面,僅僅是每次循環(huán)賦一次值,并不是每次循環(huán)都創(chuàng)建一次,所以 時間復雜度為 1。

fxcvjI.jpg

同樣的,上圖起到?jīng)Q定空間復雜度的變量即為圖中畫紅線的變量。容量一律用N 來表示,故為O(N)。

fxh9fO.jpg

此處遞歸代碼的空間復雜度為O(N),因為每次遞歸都會開辟函數(shù)的棧幀,這個棧幀里面存有值,因為上面的代碼的遞歸次數(shù)是 N 次,所以它也就開辟了 N 次,也就有了N 個值。

到此這篇關(guān)于Java基礎(chǔ)之toString的序列化 匿名對象 復雜度精解的文章就介紹到這了,更多相關(guān)Java toString內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java語言實現(xiàn)二叉堆的打印代碼分享

    Java語言實現(xiàn)二叉堆的打印代碼分享

    這篇文章主要介紹了Java語言實現(xiàn)二叉堆的打印代碼分享,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • 純Java實現(xiàn)數(shù)字證書生成簽名的簡單實例

    純Java實現(xiàn)數(shù)字證書生成簽名的簡單實例

    下面小編就為大家?guī)硪黄僇ava實現(xiàn)數(shù)字證書生成簽名的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • java之minio文件服務器的日常操作

    java之minio文件服務器的日常操作

    本文介紹如何在Java項目中配置Minio服務,通過創(chuàng)建minioConfig和minioDto來管理連接信息,并通過minioUtils工具類實現(xiàn)文件的上傳、下載和刪除功能,詳細說明了如何從application.yml文件中讀取配置,并強調(diào)了避免static情況下minioDto為null的問題,另外,提到刪除操作是延遲的
    2024-10-10
  • SpringBoot整合Swagger接口文檔工具的流程步驟

    SpringBoot整合Swagger接口文檔工具的流程步驟

    我們在開發(fā)接口的時候,會將接口文檔給前端的開發(fā)者進行對接,我們可以通過Postman或者Yapi等接口管理工具進行編寫管理,實際開發(fā)中,接口的管理確實也應該通過專業(yè)的工具管理,本文,我們就來談談怎么在SpringBoot整合Swagger接口文檔工具
    2023-08-08
  • Java圖文并茂詳解NIO與零拷貝

    Java圖文并茂詳解NIO與零拷貝

    零拷貝是網(wǎng)絡編程的關(guān)鍵,很多性能優(yōu)化都離不開。在?Java?程序中,常用的零拷貝有?mmap(memory?map,內(nèi)存映射)?和?sendFile。那么它們在?OS(操作系統(tǒng))?中,到底是怎么樣的一個的設(shè)計?另外我們看下NIO?中如何使用零拷貝
    2022-11-11
  • jvm排查工具箱jvm-tools下載使用詳解

    jvm排查工具箱jvm-tools下載使用詳解

    這篇文章主要為大家介紹了jvm排查工具箱jvm-tools下載使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 使用fastjson中的JSONPath處理json數(shù)據(jù)的方法

    使用fastjson中的JSONPath處理json數(shù)據(jù)的方法

    這篇文章主要介紹了使用fastjson中的JSONPath處理json數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • 一篇文章帶你了解Java基礎(chǔ)-抽象

    一篇文章帶你了解Java基礎(chǔ)-抽象

    這篇文章主要給大家介紹了關(guān)于Java抽象定義以及舉例的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • 常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實現(xiàn)示例

    常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實現(xiàn)示例

    這篇文章主要介紹了常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實現(xiàn)示例,一般來說DSA算法用于簽名的效率會比RSA要快,需要的朋友可以參考下
    2016-04-04
  • SpringBoot數(shù)據(jù)庫查詢超時配置詳解

    SpringBoot數(shù)據(jù)庫查詢超時配置詳解

    這篇文章主要介紹了SpringBoot數(shù)據(jù)庫查詢超時配置,超時配置可以避免長時間占用數(shù)據(jù)庫連接,提高系統(tǒng)的響應速度和吞吐量,還可以快速的反饋可以提升用戶體驗,避免用戶因長時間等待而感到挫敗,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-11-11

最新評論

陕西省| 徐水县| 沅陵县| 望城县| 大足县| 株洲县| 汉寿县| 枣强县| 和龙市| 黄龙县| 昆山市| 建湖县| 凤冈县| 城固县| 中西区| 嘉峪关市| 且末县| 讷河市| 延吉市| 吴堡县| 辽阳市| 潜山县| 论坛| 横峰县| 通江县| 加查县| 苗栗市| 兰坪| 木里| 大渡口区| 湛江市| 海口市| 红原县| 洪雅县| 永济市| 隆林| 察雅县| 石门县| 抚松县| 博爱县| 柏乡县|