国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧

這篇具有很好參考價(jià)值的文章主要介紹了面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

數(shù)據(jù)結(jié)構(gòu)之常見的8種數(shù)據(jù)結(jié)構(gòu):

-數(shù)組Array

-鏈表 Linked List

-堆 heap

-棧 stack

-隊(duì)列 Queue

-樹 Tree

-散列表 Hash

-圖 Graph

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

數(shù)據(jù)結(jié)構(gòu)-鏈表篇

Linklist定義:


-是一種線性表,并不會(huì)按線性的順序存儲(chǔ)數(shù)據(jù),即邏輯上相鄰,物理上不一定相鄰的元素。通過指針域來尋找對應(yīng)的元素。

Linklist優(yōu)缺點(diǎn):

優(yōu)點(diǎn):
-插入、刪除速度快

-靈活分配結(jié)點(diǎn)空間

缺點(diǎn):
-查詢速度慢

通過Linklist常用方法來深入底層原理


-add(E e)

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

-add(int index, E element)

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

-remove(Obeject o)

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

-remove(int index)

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

-ListIterator正向遍歷

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

-反向遍歷

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

總結(jié):


-插入、刪除速度快是因?yàn)橹灰ㄟ^前后指針就能插入或者刪除到鏈表中,不需要移動(dòng)其它元素,插入頭尾節(jié)點(diǎn)更快,因?yàn)镹ode結(jié)構(gòu)體中保存了頭尾指針。

-查詢速度慢是因?yàn)?,查詢先通過右位移運(yùn)算來判斷對鏈表是前半部分遍歷還是后半部分遍歷,剩下的半部分遍歷則是一個(gè)個(gè)節(jié)點(diǎn)遍歷,頭尾查詢快,因?yàn)楸4媪祟^尾指針。
?

數(shù)據(jù)結(jié)構(gòu)--數(shù)組篇
數(shù)組的定義:


-申請一塊連續(xù)的內(nèi)存空間來存儲(chǔ)相同類型數(shù)據(jù)的集合

-數(shù)組存儲(chǔ)的是對象的引用而非是對象本身

數(shù)組的優(yōu)缺點(diǎn):


優(yōu)點(diǎn):查詢速度快(O(1)復(fù)雜度),因?yàn)樗拇鎯?chǔ)是連續(xù)的內(nèi)存空間,查找元素=首地址 + 每個(gè)元素所分配的空間*下標(biāo)

從cpu的讀?。篶pu在讀取數(shù)組的時(shí)候,可以借助緩存機(jī)制預(yù)讀數(shù)組的數(shù)據(jù),cpu在讀取內(nèi)存的時(shí)候會(huì)把一塊連續(xù)的內(nèi)存空間讀入,當(dāng)進(jìn)行遍歷時(shí),直接命中。而鏈表是跳躍式的地址,在緩存中命中的概率低,就要跑到內(nèi)存中去讀取數(shù)據(jù),緩存的速度遠(yuǎn)大于內(nèi)存的讀取速度。

缺點(diǎn):插入 、刪除速度慢,因?yàn)樾枰苿?dòng)該元素后面的所有元素位置

數(shù)組的使用場景:


-適合查詢多,插入、刪除少的場景(整體上來說)

通過數(shù)組方法來深入底層原理


ArrayList方法中的常用方法
-add(E e)方法

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展
流程圖:

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展
remove(int index)方法:

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

remove(Object o)方法

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

remove注意:remove(Object o)方法使用了2個(gè)對null跟非null分別使用了==跟equals做了等值比較,找到元素對應(yīng)的索引位置后再刪除與remove(int index)方法步驟基本一樣

Iterator遍歷方法

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

迭代注意:迭代過程中有2次的ConcurrentModification檢驗(yàn),一次是2個(gè)記錄修改次參數(shù)expectedModCount = modCount等值校驗(yàn)。二次是 i >= elementData.length,并發(fā)過程中多次調(diào)用next方法。

Iterator的remove方法

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

關(guān)于System.arraycopy,Array.copyof區(qū)別:
-System.arraycopy(Object src, int srcPos, Object dest, int destPos,int length)

有5個(gè)參數(shù)

src :原數(shù)組

srcPos:原數(shù)組開始元素拷貝的索引位置

dest:目標(biāo)數(shù)組

destPos:在目標(biāo)數(shù)組的索引位置開始拷貝

length:拷貝的數(shù)組長度

-Arraycopyof 底層調(diào)用的也是Native方法的System.arraycopy

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展
面試點(diǎn)提問:幾種刪除方式有什么區(qū)別


重點(diǎn)關(guān)注:expectedModCount = modCount;ConcurrentModificationException

for循環(huán)刪除跟Iterator刪除方式有什么不同?

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

Iterator方法:

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展

正序for循環(huán)則直接調(diào)用remove(Object)或者remove(index)方法,修改了modCount++的值,但是并沒有走checkForComodification()檢驗(yàn),該方法只針對了實(shí)現(xiàn)了Iterator<E>的類,想要正確刪除元素請使用倒序刪除

以上2個(gè)方法都可以直接刪除元素不會(huì)報(bào)錯(cuò),正序for循環(huán)不保證結(jié)果正確性

可以用foreach加強(qiáng)循環(huán)刪除么?
a,foreach底層的實(shí)現(xiàn)原理就是通過Iterator迭代來實(shí)現(xiàn)的。所以會(huì)存在修改次數(shù)跟預(yù)期值修改值的比較判斷。

b,而foreach循環(huán)在刪除元素的時(shí)候走的是fastRemove()方法,

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展
c,只增加了modCount++

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展
d,并沒有expectedModCount = modCount賦值語句,在下一次的循環(huán)就會(huì)報(bào)錯(cuò)

面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧,面試題,java知識(shí),面試,數(shù)據(jù)結(jié)構(gòu),職場和發(fā)展
綜上所述:使用Iterator跟for循環(huán)是可以成功刪除元素的,foreach循環(huán)則不行。checkForComodification()檢驗(yàn),該方法只針對了實(shí)現(xiàn)了Iterator<E>的類,而Iterator跟foreach底層實(shí)現(xiàn)都是依賴這個(gè)接口。for循環(huán)則不依賴

注意上面的Demo只是說刪除元素時(shí)會(huì)不會(huì)報(bào)錯(cuò),并不是說上面幾種方式都能正確刪除完全,使用for循環(huán)保證正取刪除元素可以使用倒序的方式,或者使用Iterator方式(推薦)。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-689947.html

到了這里,關(guān)于面試被打臉,數(shù)據(jù)結(jié)構(gòu)底層都不知道么--回去等通知吧的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL底層數(shù)據(jù)結(jié)構(gòu)

    MySQL底層數(shù)據(jù)結(jié)構(gòu)

    一個(gè)sql語句在mysql中究竟是如何運(yùn)行的?又應(yīng)該通過怎樣的方式去查找我們要找的數(shù)據(jù)?這里就涉及到幾種存儲(chǔ)數(shù)據(jù)的算法; 可以做索引的數(shù)據(jù)結(jié)構(gòu)有數(shù)組、鏈表、二叉搜索樹和B樹(B-樹、B+樹)。 2.1、HASH 由于HASH查詢和寫入的時(shí)間復(fù)雜度是O(1),這意味著只需要一次hash計(jì)算就

    2024年02月08日
    瀏覽(18)
  • Redis - 底層數(shù)據(jù)結(jié)構(gòu)

    Redis - 底層數(shù)據(jù)結(jié)構(gòu)

    Redis 的底層數(shù)據(jù)結(jié)構(gòu)主要以下幾種: SDS(Simple Dynamic String, 簡單動(dòng)態(tài)字符串) ZipList(壓縮列表) QuickList(快表) Dict(字典) IntSet(整數(shù)集合) ZSkipList(跳躍表) 在 Redis 中,并不會(huì)直接使用 C 語言自帶的字符串結(jié)構(gòu)作為實(shí)際的存儲(chǔ)結(jié)構(gòu),而只是將字符串作為字面量使用,大多數(shù)情況使用自

    2023年04月12日
    瀏覽(30)
  • Redis底層數(shù)據(jù)結(jié)構(gòu)

    SDS全稱是Simple Dynamic String,具有如下顯著的特點(diǎn): 常數(shù)復(fù)雜度獲取字符串長度:C語言獲取一個(gè)字符串的長度需要遍歷整個(gè)字符串時(shí)間復(fù)雜度為O(N),而SDS在屬性len中記錄了字符串長度,獲取字符串長度的時(shí)間復(fù)雜度為O(1)。 杜絕緩沖區(qū)溢出:C字符串在執(zhí)行拼接字符串時(shí),如果

    2024年02月13日
    瀏覽(33)
  • redis 底層數(shù)據(jù)結(jié)構(gòu)詳解

    redis 底層數(shù)據(jù)結(jié)構(gòu)詳解

    目錄 ? 1.字符串 1.1 SDS定義 1.2 SDS1好處 2.列表 2.1 void 實(shí)現(xiàn)多態(tài) 3 字典 3.1 ? 底層實(shí)現(xiàn)是hash表 3.2 字典結(jié)構(gòu) 3.3?哈希算法 3.3.1 rehash 3.3.2 rehash的觸發(fā)時(shí)機(jī) 3.3.3?漸進(jìn)式rehash 擴(kuò)展或收縮哈希表需要將ht[0]里面的所有鍵值對rehash到ht[1]里面,但是,這個(gè)rehash動(dòng)作并不是一次性、集中式

    2023年04月09日
    瀏覽(22)
  • java 數(shù)據(jù)結(jié)構(gòu) ArrayList源碼底層 LinkedList 底層源碼 迭代器底層

    java 數(shù)據(jù)結(jié)構(gòu) ArrayList源碼底層 LinkedList 底層源碼 迭代器底層

    對于數(shù)據(jù)結(jié)構(gòu)我這邊只告訴你右邊框框里的 棧的特點(diǎn):后進(jìn)先出,先進(jìn)后出,入棧也成為壓棧,出棧也成為彈棧 棧就像一個(gè)彈夾 隊(duì)列先進(jìn)先出后進(jìn)后出 隊(duì)列像排隊(duì) 鏈表查詢滿 但是增刪快(相對于數(shù)組而言) 拓展:還有一個(gè)雙向鏈表 他在查詢元素的時(shí)候更快些,因?yàn)樗谀玫揭粋€(gè)元素

    2024年02月05日
    瀏覽(26)
  • Redis - 數(shù)據(jù)類型映射底層結(jié)構(gòu)

    Redis - 數(shù)據(jù)類型映射底層結(jié)構(gòu)

    從數(shù)據(jù)類型上體現(xiàn)就是,同一個(gè)數(shù)據(jù)類型,在不同的情況下會(huì)使用不同的編碼類型,底層所使用的的數(shù)據(jù)結(jié)構(gòu)也不相同。 字符串對象的編碼可以是 int 、 raw 和 embstr 三者之一。 embstr 編碼是專門用于保存簡短字符串的一種優(yōu)化編碼方式,與 raw 編碼會(huì)調(diào)用兩次內(nèi)存分配函數(shù)分

    2023年04月21日
    瀏覽(27)
  • 關(guān)于對索引底層數(shù)據(jù)結(jié)構(gòu)的理解

    關(guān)于對索引底層數(shù)據(jù)結(jié)構(gòu)的理解

    目錄 我們在談?wù)撍饕讓拥臄?shù)據(jù)結(jié)構(gòu)之前,我們不妨先想一下索引是什么以及索引存在的作用 Hash 二叉搜索樹與二叉平衡樹 多叉平衡查找樹(B樹) B+樹 索引:是一種特殊的文件,包含著對數(shù)據(jù)庫表中所有記錄的引用指針,而其的作用也體現(xiàn)的很明確了,我們通過創(chuàng)建索引來

    2024年02月09日
    瀏覽(23)
  • InnoDB底層的一些主要數(shù)據(jù)結(jié)構(gòu)

    MySQL的InnoDB存儲(chǔ)引擎使用了一些關(guān)鍵的底層數(shù)據(jù)結(jié)構(gòu)來優(yōu)化數(shù)據(jù)的存儲(chǔ)、索引和查詢。以下是InnoDB底層的一些主要數(shù)據(jù)結(jié)構(gòu): 1. **B+樹索引**: ? ?- InnoDB的主要數(shù)據(jù)結(jié)構(gòu)是B+樹(平衡樹的一種變體),用于存儲(chǔ)表數(shù)據(jù)和索引。 ? ?- 每個(gè)InnoDB表都有一個(gè)主鍵索引(如果沒有顯式

    2024年02月01日
    瀏覽(23)
  • JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯

    JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯

    ?作者簡介:大家好,我是橘橙黃又青,一個(gè)想要與大家共同進(jìn)步的男人???? ??個(gè)人主頁:再無B~U~G-CSDN博客 目標(biāo): 1. 什么是 List 2. List 常見接口介紹 3. List 的使用 本章主要學(xué)習(xí)順序表底層邏輯,大致是一樣的,不差多少。 在集合框架中, List 是一個(gè)接口,繼承自 Co

    2024年04月29日
    瀏覽(24)
  • 源碼分析——ConcurrentHashMap源碼+底層數(shù)據(jù)結(jié)構(gòu)分析

    源碼分析——ConcurrentHashMap源碼+底層數(shù)據(jù)結(jié)構(gòu)分析

    1. 存儲(chǔ)結(jié)構(gòu) Java 7 中 ConcurrentHashMap 的存儲(chǔ)結(jié)構(gòu)如上圖,ConcurrnetHashMap 由很多個(gè) Segment 組合,而每一個(gè) Segment 是一個(gè)類似于 HashMap 的結(jié)構(gòu),所以每一個(gè) HashMap 的內(nèi)部可以進(jìn)行擴(kuò)容。但是 Segment 的個(gè)數(shù)一旦 初始化就不能改變 ,默認(rèn) Segment 的個(gè)數(shù)是 16 個(gè),你也可以認(rèn)為 ConcurrentH

    2024年02月13日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包