ArrayList和Arrayst有何不同,你知道嗎?
ArrayList和ArrayList有何不同?大家好,我是磊哥,一位經驗豐富的程序員。今天我們來探討一個常見的面試問題——ArrayList和ArrayList有何不同?
首先需要說明的是,ArrayList和LinkedList都是Java中list接口的實現類。我們可以在代碼中找到這個接口,并看到其中有多個實現類,其中之一是ArrayList。這個類的中文意思是“數組列表”,它是一個數組,數組中的元素構成了一個列表。ICOL the list就是列表的意思,好,ok,它們的外觀如何?
可以看下圖,上面是一個數組,這些數組連在一起就形成了一個ArrayList。下面這個圖中的節點通過指針連接在一起,形成了一個 ArrayList。這就是它們的外觀。
它們有什么不同呢?它們的不同主要體現在以下三個方面。
·第一點是底層實現不同。ArrayList是基于動態數組實現的,而LinkedList是基于鏈表實現的。這是它們的不同之處。
·第二點是隨機訪問的性能不同。 ArrayList從下標為零開始,下標為一,下標為二。當訪問下標為二的元素時,可以直接取到下標為三的元素,因此它的時間復雜度是L1。而ArrayLiL則不同。它在進行隨機訪問時只能從根節點開始,因此時間復雜度為O(n)。因此,在隨機訪問方面,ArrayLiL的性能不如ArrayList。
·第三點不同是它們的插入和刪除性能不同。由于ArrayLiL是動態數組,當刪除下標為零的元素時,后面的元素需要向前移動,因為老大不在了,老二代替老大的位置,老三代替老二的位置,后面所有的元素都需要向前移動。因此,除了添加和刪除的性能之外,插入和刪除的性能也一樣。
如果添加元素時添加到了第一個位置,那么其他位置的元素也需要向后移動,原來的第一個位置也需要向后移動。因此,對于添加和刪除操作,ArrayLiL的性能也不如ArrayList。
released的速度相對較慢,但對于linkthelist來說則不是如此。如果要刪除頭結點,只需將其刪除即可。這樣,后面的所有節點都不會受到影響,因為它們的位置和指針都不會發生變化,只是頭節點不見了而已。如果第二個節點不見了,也只需要將其刪除,然后將第一個節點的下一個指針指向原來的第三個位置即可。這樣做的過程中,只需要修改一個位置。
而對于released來說,則需要將后面的所有元素都向前移動,因此在插入和刪除操作上,lincolnlist的性能要優于released。這是它們三者之間的主要區別。可以將它們視為平分秋色的兩種實現方式,一個是數組,一個是列表。在隨機訪問方面,connect更加高效。在刪除和添加操作方面,connect和the list的性能都更好,因此兩者可以打平。
這篇文章介紹了基本的語法和使用方法,讀者可以通過添加方法來創建released,并通過at方法進行添加。當然,也可以使用泛型,以確保添加的元素只能是And。發布的使用方式與發布非常相似,也是一種泛型結構。
發型的定義方式仍然是通過某種方法進行添加的,最后進行打印。為什么?因為它們的方法非常相似,使用度達到了90%。它們都來自于list的基礎行為,比如添加,就是通過at實現的。只是在發布和林肯發布下面有不同的實現方式。這就是它們兩個技術的使用方式。
簡單總結一下,對于發布和林肯發布來說,它們都是list下面的兩個實線類,但有三點不同。底層的實線數據結構不同,隨機訪問的性能不同,以及插入和刪除的性能不同。在隨機訪問較多、詢問較多的場景下,可以選擇使用發布。如果在添加和刪除頻率較高的場景下,可以選擇使用林肯發布,今天的內容到此結束。記得一鍵私聯,下期再見,拜拜。