Java中Array、List、ArrayList的區(qū)別及說明
Array、List、ArrayList區(qū)別
Array
Array(數(shù)組)是基于索引(index)的數(shù)據(jù)結(jié)構(gòu),它使用索引在數(shù)組中搜索和讀取數(shù)據(jù)是很快的。
Array獲取數(shù)據(jù)的時間復雜度是O(1),但是要刪除數(shù)據(jù)卻是開銷很大,因為這需要重排數(shù)組中的所有數(shù)據(jù)。
List
List—是一個有序的集合,可以包含重復的元素,提供了按索引訪問的方式,它繼承Collection。
List是一個接口,不能寫成如下:
List<Integer> list = new List<Integer>();//錯誤
List有兩個重要的實現(xiàn)類:ArrayList和LinkedList
ArrayList
繼承關系
可以看作是能夠自動增長容量的數(shù)組;
利用ArrayList的toArray返回一個數(shù)組;
Arrays.asList返回一個列表;
- ArrayList底層采用數(shù)組實現(xiàn),當使用不帶參數(shù)的構(gòu)造方法生成ArrayList對象時,實際上會在底層生成一個長度為10的Object類型的數(shù)組。
- 如果增加的元素個數(shù)超過10個,那么ArrayList底層會生成一個新的數(shù)組,長度為原數(shù)組的1.5倍+1,然后將原數(shù)組的內(nèi)容復制到新數(shù)組中,并且后續(xù)增加的內(nèi)容都會放到新的數(shù)組當中,當新的數(shù)組無法容納增加的元素時,重讀該過程。
- 對于ArrayList元素的刪除操作,需要將被刪除元素的后續(xù)元素向前移動,代價比較大。
- 集合當中只能放置對象的引用,無法放置原生數(shù)據(jù)類型,我們必須使用原生數(shù)據(jù)的包裝類才能加入到集合當中。
- 集合當中都是Object類型,因此取出來的也是Object類型,那么必須要使用強制類型轉(zhuǎn)化將其轉(zhuǎn)換成真正的類型(放置進去的類型)。
LinkedList
是一個雙鏈表,在添加和刪除元素時具有比ArrayList更好的性能.但在get與set方面弱于ArrayList.當然,這些對比都是指數(shù)據(jù)量很大或者操作很頻繁。
- 相對于ArrayList,LinkedList插入是更快的。因為LinkedList不像ArrayList一樣,不需要改變數(shù)組的大小,也不需要在數(shù)組裝滿的時候要將所有的數(shù)據(jù)重新裝入一個新的數(shù)組,這是ArrayList最壞的一種情況,時間復雜度是O(n),而LinkedList中
- 插入或刪除的時間復雜度僅為O(1)。ArrayList在插入數(shù)據(jù)時還需要更新索引(除了插入數(shù)組的尾部)。
- 類似于插入數(shù)據(jù),刪除數(shù)據(jù)時,LinkedList也優(yōu)于ArrayList。
- LinkedList需要更多的內(nèi)存,因為ArrayList的每個索引的位置是實際的數(shù)據(jù),而LinkedList中的每個節(jié)點中存儲的是實際的數(shù)據(jù)和前后節(jié)點的位置。
Array和ArrayList有何區(qū)別?什么時候更適合用Array?
Array 可以容納基本類型和對象,而 ArrayList 只能容納對象。
Array 是指定大小的,而 ArrayList 大小是固定的。
Array 沒有提供 ArrayList 那么多功能,比如 addAll 、 removeAll 和 iterator 等。盡管 ArrayList 明顯是更好的選擇,但也有些時候 Array 比較好用。
1 、如果列表的大小已經(jīng)指定,大部分情況下是存儲和遍歷它們。
2 、對于遍歷基本數(shù)據(jù)類型,盡管 Collections 使用自動裝箱來減輕編碼任務,在指定大小的基本類型的列表上工作也會變得很慢。
3 、如果你要使用多維數(shù)組,使用 [][] 比 List<List<>> 更容易。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringCloud微服務調(diào)用丟失請求頭的問題及解決方案
在Spring Cloud 中微服務之間的調(diào)用會用到Feign,但是在默認情況下,Feign 調(diào)用遠程服務存在Header請求頭丟失問題,下面給大家分享SpringCloud微服務調(diào)用丟失請求頭的問題及解決方案,感興趣的朋友一起看看吧2024-02-02Java使用EasyExcel實現(xiàn)Excel的導入導出
這篇文章主要給大家介紹了關于Java使用EasyExcel實現(xiàn)Excel的導入導出,在各種系統(tǒng)中,導入導出的數(shù)據(jù)一般都是通過Excel來完成的,需要的朋友可以參考下2023-07-07Java中如何將json字符串轉(zhuǎn)換成map/list
這篇文章主要介紹了Java中如何將json字符串轉(zhuǎn)換成map/list,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Java中l(wèi)ist集合的clear方法及空字符串的區(qū)別
這篇文章主要介紹了Java中l(wèi)ist集合的clear方法及空字符串的區(qū)別,在使用list?結(jié)合的時候習慣了?list=null?;在創(chuàng)建這樣的方式,但是發(fā)現(xiàn)使用list的clear?方法很不錯,尤其是有大量循環(huán)的時候<BR>list.clear()與list?=?null?區(qū)別,需要的朋友可以參考下2023-08-08