免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

.NET源碼學(xué)習(xí) [算法2-數(shù)組與字符串的查找與匹配]

[算法2-數(shù)組與字符串的查找與匹配] (.NET源碼學(xué)習(xí))關(guān)鍵詞:1. 數(shù)組查找(算法)   2. 字符串查找(算法)   3. C#中的String(源碼)   4. 特性Attribute 與內(nèi)在屬性(源碼)   5. 字符串的比較(底層原理)   6. C#中的StringComparsion(源碼)   7. 字符串與暫存池(底層原理)
 
【注:本人在寫文章時(shí)遇到認(rèn)為有必要或想要展開的點(diǎn)就會(huì)將其并入文章中 , 避免事后遺忘 。因此非主題內(nèi)容可能會(huì)比較多 , 篇幅也可能比較大 , 各位學(xué)者在瀏覽時(shí)可以自行轉(zhuǎn)跳到感興趣的部分進(jìn)行閱覽 , 存在相關(guān)問(wèn)題或建議 , 歡迎留言指導(dǎo) , 謝謝!】
 
查找 , 大體上可以分為兩類:數(shù)組查找、字符串查找 。其中數(shù)組查找以二分為主;字符串查找以BK、BM、KMP三類算法為主 。由于二分在之前的文章中已經(jīng)詳細(xì)敘述過(guò) , 在此不再重復(fù)論述 。故本文主要以有關(guān)字符串的查找為重點(diǎn) , 附帶.NET關(guān)于String類型及相關(guān)底層邏輯的源碼分析為主 , 進(jìn)行論述 。
【# 請(qǐng)先閱讀注意事項(xiàng)】
【注:
(1)文章篇幅較長(zhǎng) , 可直接轉(zhuǎn)跳至想閱讀的部分 。
(2)以下提到的復(fù)雜度僅為算法本身 , 不計(jì)入算法之外的部分(如 , 待排序數(shù)組的空間占用)且時(shí)間復(fù)雜度為平均時(shí)間復(fù)雜度 。
(3)除特殊標(biāo)識(shí)外 , 測(cè)試環(huán)境與代碼均為.NET 6/C# 10 。
(4)默認(rèn)情況下 , 所有解釋與用例的目標(biāo)數(shù)據(jù)均為升序 。
(5)默認(rèn)情況下 , 圖片與文字的關(guān)系:圖片下方 , 是該幅圖片的解釋 。
(6)文末“ [ # … ] ”的部分僅作補(bǔ)充說(shuō)明 , 非主題(算法)內(nèi)容 , 該部分屬于 .NET 底層運(yùn)行邏輯 , 有興趣可自行參閱 。
(7)本文內(nèi)容基本為本人理解所得 , 可能存在較多錯(cuò)誤 , 歡迎指出并提出意見 , 謝謝 ?!?br /> 一、有關(guān)數(shù)組(一) 二分查找及相關(guān)優(yōu)化關(guān)于二分的相關(guān)內(nèi)容 , 在本人的這篇文章中(LC T668筆記 & 有關(guān)二分查找、第K小數(shù)、BFPRT算法 - PaperHammer - 博客園 (cnblogs.com))有較為詳細(xì)地論述 , 詳情請(qǐng)參閱 。
在此 , 僅總結(jié)一下二分的要點(diǎn):
1. 二分集合須保證有序 。有序是二分的前提 , 在二分前須明確二分的對(duì)象 , 該對(duì)象必須具有有序性 。
2. 確定搜索區(qū)間形式(閉區(qū)間、左閉右開、左開右閉) 。不同區(qū)間形式 , 循環(huán)條件與最終返回值不同;同時(shí)也應(yīng)用于不同的場(chǎng)景 。
3. 盡量寫或想清楚所有的if…else… , 清楚地展現(xiàn)出所有細(xì)節(jié) , 避免不必要的紕漏與麻煩 。
(二) 有關(guān)方法BinarySearch()的源碼該方法的主要實(shí)現(xiàn)形式是雙指針或折半查找 , 詳細(xì)內(nèi)容在本人之前的文章([數(shù)據(jù)結(jié)構(gòu)1.2-線性表] 動(dòng)態(tài)數(shù)組ArrayList(.NET源碼學(xué)習(xí)) - PaperHammer - 博客園 (cnblogs.com))中 , 詳情請(qǐng)參閱 。
二、有關(guān)字符串(一) .NET中的String與C#中的string1. C#是區(qū)分大小寫的語(yǔ)言 , 所以string與String理論上是不同的 , 但在編譯器的定義導(dǎo)航中 , 卻將這兩個(gè)類型均導(dǎo)航至同一個(gè)類——類String 。
2. 據(jù)現(xiàn)有資料可知 , String是.NET(以前稱為.NET Framework)中的類 , string是C#中的類 。在C#中使用string時(shí) , 編譯器會(huì)將string自動(dòng)映射到.NET中的String , 同時(shí)調(diào)用的方法也是.NET中類String內(nèi)部的方法 。據(jù)該原理 , 使用String可以在一定程度上減少編譯器的工作量 , 但微軟官方不建議這樣 , 依舊建議使用string以符合相關(guān)規(guī)范 。其他基本數(shù)據(jù)類型也是如此 , 如short映射Int16 , int映射Int32 , long映射Int64 , double映射Double等 。

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀