1. ⾸先,他們的底層資料結構不同,arraylist底層是基於陣列實現的,linkedlist底層是基於鍊錶實現的
2. 由於底層資料結構不同,他們所適⽤的場景也不同,arraylist更適合隨機查詢,linkedlist更適合刪除和新增,查詢、新增、刪除的時間複雜度不同
3. 另外arraylist和linkedlist都實現了list接⼝,但是linkedlist還額外實現了deque接⼝,所以linkedlist還可以當做佇列來使⽤
先說hashmap的put⽅法的⼤體流程:
1. 根據key通過雜湊演算法與與運算得出陣列下標
2. 如果陣列下標位置元素為空,則將key和value封裝為entry物件(jdk1.7中是entry物件,jdk1.8中是node物件)並放⼊該位置
3. 如果陣列下標位置元素不為空,則要分情況討論
a. 如果是jdk1.7,則先判斷是否需要擴容,如果要擴容就進⾏擴容,如果不⽤擴容就⽣成entry物件,並使⽤頭插法新增到當前位置的鍊錶中
b. 如果是jdk1.8,則會先判斷當前位置上的node的型別,看是紅⿊樹node,還是鍊錶node
i. 如果是紅⿊樹node,則將key和value封裝為⼀個紅⿊樹節點並新增到紅⿊樹中去,在這個過程中會判斷紅⿊樹中是否存在當前key,如果存在則更新value
ii. 如果此位置上的node物件是鍊錶節點,則將key和value封裝為⼀個鍊錶node並通過尾插法插⼊到鍊錶的最後位置去,因為是尾插法,所以需要遍歷鍊錶,在遍歷鍊錶的過程中會判斷是否存在當前key,如果存在則更新value,當遍歷完煉表後,將新鍊錶node插⼊到鍊錶中,插⼊到鍊錶後,會看當前鍊錶的節點個數,如果⼤於等於8,那麼則會將該鍊錶轉成紅⿊樹
iii. 將key和value封裝為node插⼊到鍊錶或紅⿊樹中後,再判斷是否需要進⾏擴容,如果需要就擴容,如果不需要就結束put
之間不共享同⼀個連線)
1. threadlocal是j**a中所提供的執行緒本地儲存機制,可以利⽤該機制將資料快取在某個執行緒內部,該執行緒可以在任意時刻、任意⽅法中獲取快取的資料
2. threadlocal底層是通過threadlocalmap來實現的,每個thread物件(注意不是threadlocal物件)中都存在⼀個threadlocalmap,map的key為threadlocal物件,map的value為需要快取的值
4. threadlocal經典的應⽤場景就是連線管理(⼀個執行緒持有⼀個連線,該連線物件可以在不同的⽅法之間進⾏傳遞,執行緒之間不共享同⼀個連線
1、堆區和⽅法區是所有執行緒共享的,棧、本地⽅法棧、程式計數器是每個執行緒獨有的
面試題總結 html面試題)
附上鏈結 doctype 的作用是什麼?宣告一般位於文件的第一行,它的作用主要是告訴瀏覽器以什麼樣的模式來解析文件。一般指定了之後會以標準模式來 進行文件解析,否則就以相容模式進行解析。在標準模式下,瀏覽器的解析規則都是按照最新的標準進行解析的。而在相容模式下,瀏 覽器會以向後相容的方式來模擬老式瀏...
面試題總結
網路部分 子網劃分 演算法部分 穩定排序 泡沫排序 bubble sort o n 插入排序 insertion sort o n 桶排序 bucket sort o n 需要 o k 額外空間 計數排序 counting sort o n k 需要 o n k 額外空間 合併排序 merge so...
面試題總結
1 關於商品秒殺的問題,如何保證100件商品,只能使前100個使用者搶到呢?思路1 我們可以使用redis快取的list儲存型別,當有乙個使用者請求到來時,將該使用者的id存放在list中,這樣當list中的llen長度達到100時就不在新增新的使用者id,然後在從list中取出對應的id運算元據庫...