1、List 和 Set 的區(qū)別

一:區(qū)別概述

1:List:可重復(fù),有序,數(shù)組或者鏈表存儲(chǔ)

2:Set:不可重復(fù),無序,使用ma存儲(chǔ)



二:ArrayList

2.1:通過數(shù)組的方式進(jìn)行存儲(chǔ):查詢快,增刪慢的特點(diǎn),但是他的效率高

2.2:初始化過程中若知道數(shù)組的大約范圍,建議制定長(zhǎng)度;若不指定長(zhǎng)度,默認(rèn)初始化大小為10;


2.3:關(guān)注ArrayList兩個(gè)屬性

????????size 和?elementData,其中size可以理解為數(shù)組長(zhǎng)度,elementData理解為容量大?。?/p>

????????比如,List a =new ArrayList(20);?a.add("1");? ? ? ? ? ? ? ? ? ? ?其中size = 1;elementData的長(zhǎng)度為20


2.4:擴(kuò)容問題:

????????每次使用add方法時(shí),會(huì)觸發(fā)擴(kuò)容方法,當(dāng)容量不夠時(shí)候,進(jìn)行擴(kuò)容:



????????擴(kuò)容時(shí)步驟:

????????????1:將size+1,和現(xiàn)在的elementData長(zhǎng)度比較比較

????????????2:若小于現(xiàn)有容量,則不擴(kuò)容;

????????????3:若大于現(xiàn)有容量,則

????????????? ? ????3 .1:備份原數(shù)組;

? ????????????? ? ? 3.2:擴(kuò)容為原來大小的1.5倍

? ? ????????????? ? 3.2:通過Arrays.copyOf(elementData, newCapacity)方法返回?cái)U(kuò)容后的數(shù)據(jù)。

2.5:刪除(remove)

? a:傳空參數(shù)的情況是全刪呀!??!

? b:主要使用了一個(gè)方法:fastRemove(int index),每次remove都是進(jìn)行一次數(shù)組拷貝,remove 后size會(huì)變化


2.6 迭代

? ?方式1:Iterator迭代器


方式2:foreach


錯(cuò)誤方式:



錯(cuò)誤方式分析:

a: ArrayList extents? AbstractList,AbstractList類有一個(gè)變量modCount,記錄數(shù)組的變化次數(shù);


每次對(duì)數(shù)組進(jìn)行增刪操作時(shí)候,都會(huì)進(jìn)行modCount++;


b:Iteratoriterator = a.iterator(); 是實(shí)例化一個(gè)AbstractList的內(nèi)部類Itr;實(shí)例化時(shí),初始化expectedModCount =modCount;

每次使用next方法時(shí),會(huì)調(diào)用checkForComodification(),這個(gè)方法是比較expectedModCount和modCount;若不相等,就報(bào)錯(cuò)。

c:正確案例中,用了內(nèi)部類Itr的remove方法,這個(gè)方法最后會(huì)強(qiáng)制expectedModCount=modCount;



d:錯(cuò)誤案例中,使用了ArrayList類的remove,只會(huì)減小modCount,不會(huì)強(qiáng)制expectedModCount=modCount;所以刪除一次后,expectedModCount<modCount,不會(huì)通過校驗(yàn),失敗。



三:LinkedList (直接抄的博客的)

?????a:是由node節(jié)點(diǎn)組成的雙向鏈表,沒有初始化容量,不存在擴(kuò)容概念;

? ? b:node節(jié)點(diǎn)的結(jié)構(gòu)如下


c:每當(dāng)有新數(shù)據(jù)添加的時(shí)候,會(huì)將元素添加到鏈表的最后位置,并將元素的prev 指向前一個(gè)元素,前一個(gè)元素的next指向需要添加的元素;






參考文章:從源碼淺談面試List 和 set 的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容