可以先從底層數(shù)據(jù)結(jié)構(gòu)開始說起,然后以某一個方法為突破口深入,比如:最大的不同是兩者底層的數(shù)據(jù)結(jié)構(gòu)不同,ArrayList底層是數(shù)組,LinkedList底層是雙向鏈表,兩者的數(shù)據(jù)結(jié)構(gòu)不同也導(dǎo)致了操作的API實現(xiàn)有所差異,拿新增實現(xiàn)來說,ArrayList會先計算并決定是否擴容,然后把新增的數(shù)據(jù)直接賦值到數(shù)組上,而LinkedList僅僅只需要改變插入節(jié)點和其前后節(jié)點的指向位置關(guān)系即可。最后說一下特點,ArrayList查詢快,增刪慢LinkedList查詢慢,增刪快。 查看全文>>
技術(shù)文章2020-10-13 |傳智播客 |ArrayList和LinkedList的區(qū)別和聯(lián)系
List是工作中最常用的集合類型之一,面試的時候,大家也會被問到各種各樣的問題,但是一般大多數(shù)情況下,只要你看了解過List集合源碼,對List集合總結(jié)結(jié)構(gòu)和源碼有所了解的話,一般都問題不大。 查看全文>>
技術(shù)文章2020-10-13 |傳智播客 |如何理解ArrayList集合
LinkedList 集合底層是一個雙向鏈表結(jié)構(gòu),具有增刪快,查詢慢的忒點,內(nèi)部包含大量操作首尾元素的方法。適用于集合元素先入先出和先入后出的場景,在隊列源碼中被頻繁使用。 查看全文>>
技術(shù)文章2020-10-13 |傳智播客 |LinkedList源碼分析
在Linux系統(tǒng)上安裝Docker有3種方式,分別為在線安裝、離線安裝以及腳本文件安裝,其中最常用也是官方推薦的安裝方式就是在線安裝。接下來將在 Ubuntu16.04系統(tǒng)上分別針對這3種安裝方式進行詳細講解。 查看全文>>
技術(shù)文章2020-10-13 |傳智播客 |Docker 安裝教程
對于sleep()方法,我們首先要知道該方法是屬于Thread類中的。而wait()方法,則是屬于Object類中的。sleep()方法導(dǎo)致了程序暫停執(zhí)行指定的時間,讓出cpu該其他線程,但是他的監(jiān)控狀態(tài)依然保持者,當(dāng)指定的時間到了又會自動恢復(fù)運行狀態(tài)。在調(diào)用sleep()方法的過程中,線程不會釋放對象鎖。而當(dāng)調(diào)用wait()方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調(diào)用notify()方法后本線程才進入對象鎖定池準(zhǔn)備獲取對象鎖進入運行狀態(tài)。 查看全文>>
技術(shù)文章2020-09-29 |黑馬程序員 |Java中Sleep和Wait有什么區(qū)別
整體上來說Lock是synchronized的擴展版,Lock提供了無條件的、可輪詢的(tryLock方法)、定時的(tryLock帶參方法)、可中斷的(lockInterruptibly)、可多條件隊列的(newCondition方法)鎖操作。另外Lock的實現(xiàn)類基本都支持非公平鎖(默認)和公平鎖,synchronized只支持非公平鎖,當(dāng)然,在大部分情況下,非公平鎖是高效的選擇。 查看全文>>
技術(shù)文章2020-09-29 |傳智播客 |Java創(chuàng)建線程的方式和優(yōu)缺點
同步代碼塊:使用 synchronized() 對需要完整執(zhí)行的語句進行“包裹”,synchronized(Obj obj) 構(gòu)造方法里是可以傳入任何類的對象。 查看全文>>
技術(shù)文章2020-09-29 |傳智播客 |如何解決多線程的同步問題
懶漢模式:在類加載的時候不被初始化。餓漢模式:在類加載時就完成了初始化,但是加載比較慢,獲取對象比較快。 餓漢模式是線程安全的,在類創(chuàng)建好一個靜態(tài)對象提供給系統(tǒng)使用,懶漢模式在創(chuàng)建對象時不加上synchronized,會導(dǎo)致對象的訪問不是線程安全的。 查看全文>>
技術(shù)文章2020-09-29 |傳智播客 |單例中懶漢和惡漢模式的區(qū)別