日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java中Array和ArrayList之间的9个区别

發(fā)布時間:2023/12/3 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中Array和ArrayList之间的9个区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

array和ArrayList都是Java中兩個重要的數(shù)據(jù)結(jié)構(gòu),在Java程序中經(jīng)常使用。 即使ArrayList在內(nèi)部由數(shù)組支持,了解Java中的數(shù)組和ArrayList之間的差異對于成為一名優(yōu)秀的Java開發(fā)人員也至關(guān)重要。 如果您知道相似點和不同點,則可以明智地決定何時在AraryList上使用數(shù)組,反之亦然。

在本文中,我將幫助您了解不同之處。 如果您來自C或C ++背景,那么您已經(jīng)知道數(shù)組是編程世界中最有用的數(shù)據(jù)結(jié)構(gòu)之一。 它為基于索引的搜索提供O(1)性能,并且是存儲數(shù)據(jù)的基本方式之一。

另一方面, ArrayList是Java Collection框架中的一個類,它是作為動態(tài)數(shù)組引入的。 由于數(shù)組本質(zhì)上是靜態(tài)的,即一旦創(chuàng)建后就無法更改數(shù)組的大小,因此,如果需要一個可以調(diào)整自身大小的數(shù)組,則應(yīng)使用ArrayList。 這是數(shù)組和ArrayList之間的根本區(qū)別。

Java中的Array vs ArrayList

最好在某些點上比較兩件事,這將使差異易于理解。 因此,讓我們看看可以在Java中將數(shù)組與ArrayList進(jìn)行比較的幾點

1.實施

數(shù)組是本機(jī)編程組件或數(shù)據(jù)結(jié)構(gòu),但ArrayList是Java Collections框架(API)中的類。 實際上, ArrayList是使用array在內(nèi)部實現(xiàn)的 。 由于ArrayList是一個類,因此它擁有一個類的所有屬性,例如,您可以創(chuàng)建對象和調(diào)用方法,但是即使數(shù)組是Java中的對象,它也不提供任何方法。 它只是公開一個length屬性來為您提供數(shù)組的長度,它是恒定的。

2.表現(xiàn)

由于ArrayList基于數(shù)組,因此您將假定它提供與數(shù)組相同的性能。 在某種程度上確實如此,但是由于ArrayList提供了額外的功能,因此ArrayList和數(shù)組之間的性能存在一些差異,主要是在內(nèi)存使用和CPU時間方面。

對于基于索引的訪問,ArrayList和array都提供O(1)性能,但是如果添加新元素會觸發(fā)調(diào)整大小,則add在ArrayList中可以為O(logN) ,因為它涉及在后臺創(chuàng)建新數(shù)組并從舊數(shù)組中復(fù)制元素到新的數(shù)組 。 ArrayList的內(nèi)存需求還不止一個用于存儲相同數(shù)量對象的數(shù)組,例如,由于ArrayList和wrapper類的對象元數(shù)據(jù)開銷較大,因此int[]會比ArrayList占用更少的內(nèi)存來存儲20個int變量。

3.類型安全

ArrayList是類型安全的,因為它支持泛型,泛型允許編譯器檢查ArrayList中存儲的所有對象的類型是否正確。 另一方面, 數(shù)組不支持Generics 。 這意味著無法進(jìn)行編譯時檢查,但是如果您嘗試將不正確的對象存儲到數(shù)組中(例如,將String存儲到int數(shù)組中),則array通過拋出ArrayStoreException來提供運(yùn)行時類型檢查。

4.靈活性

靈活性是分隔array和ArrayList的最重要的事情。 簡而言之,ArrayList比普通的本地數(shù)組更靈活,因為它是動態(tài)的。 它可以在需要時自行增長,而本機(jī)陣列則無法實現(xiàn)。 ArrayList還允許您刪除本機(jī)數(shù)組無法實現(xiàn)的元素。 通過刪除,我們的意思不僅是將null分配給相應(yīng)的索引,還意味著將其余元素向下復(fù)制一個索引,而ArrayList會自動為您執(zhí)行此操作。 您可以在我的文章clear()和removeAll()之間的區(qū)別中了解有關(guān)從ArayList刪除對象的更多信息。

5.原語

如果您首先開始使用ArrayList,那么您將意識到您無法在ArrayList上存儲基元。 這是array和ArrayList之間的主要區(qū)別,因為array允許存儲基元和object 。 例如,int []數(shù)字有效,但int的ArrayList無效。 您如何處理這個問題?

假設(shè)您想將int原語存儲到ArrayList中,那又如何呢? 好了,您可以使用包裝器類。 這是在Java中引入包裝器類的原因之一。 因此,如果您只想將int 2存儲到ArrayList中,其余的操作將由自動裝箱完成。 順便說一句,由于自動裝箱 ,這種差異從Java 5開始并不明顯,因為您會看到ArrayList.add(21)完全有效并且可以正常工作。

6.泛型

ArrayList和數(shù)組之間的另一個重要區(qū)別是,前者支持Generic,而后者不支持Generic。 由于數(shù)組是協(xié)變類型的,因此可以將泛型與它們一起使用。 這意味著編譯器不可能在編譯時檢查數(shù)組的類型安全性,但他們可以驗證Array的類型安全性。 那么在用Java編寫類型安全的類時如何處理這個問題呢? 好了,您可以使用有效Java中顯示的技術(shù),在其中可以聲明一個像E[]這樣的數(shù)組,然后使用類型轉(zhuǎn)換。

7.迭代

ArrayList提供了更多的迭代方式,即與數(shù)組相比一一訪問所有元素。 您只能使用循環(huán),例如for,while,for循環(huán)的增強(qiáng)和do-while來遍歷數(shù)組,但也可以使用Iterator和ListIterator類來遍歷ArrayList。 請參閱此處以了解在Java中迭代ArrayList的不同方法。

8.支持的運(yùn)營

由于ArrayList在內(nèi)部由數(shù)組支持,因此它公開了數(shù)組可能執(zhí)行的操作,但鑒于其動態(tài)性質(zhì),它還添加了本機(jī)數(shù)組無法執(zhí)行的操作,例如,您可以在array和ArrayList中存儲元素,但只有ArrayList允許您刪除一個元素。 盡管您可以通過將null分配給相應(yīng)的索引來模擬數(shù)組,但是除非您也將數(shù)組中該索引上方的所有元素都向下移動一級,否則它不會像remove。

ArrayList和array都提供了檢索元素的方法,例如ArrayList的get()方法使用索引從數(shù)組中獲取元素,例如, version[0]將返回第一個元素。

ArrayList還提供清除和重用的操作,例如clear()和removeAll() ,數(shù)組不提供該操作,但是您可以循環(huán)訪問Array并為每個索引分配null來模擬它。

9. Size()與長度

數(shù)組僅提供一個length屬性,該屬性告訴您數(shù)組中的插槽數(shù),即可以存儲多少個元素,它不提供任何方法來找出已填充的元素數(shù)和多少個插槽為空,即元素。 盡管ArrayList確實提供了size()方法,該方法告訴給定時間點存儲在ArrayList中的對象數(shù)量。 size()始終與長度不同,這也是ArrayList的容量。 如果您想了解更多信息,建議您閱讀ArrayList文章中的size()和length之間的區(qū)別 。

10.尺寸

數(shù)組和ArrayList之間的另一個顯著區(qū)別是,數(shù)組可以是多維的,例如,您可以具有二維數(shù)組或三維數(shù)組,這使其成為表示矩陣和2D地形的非常特殊的數(shù)據(jù)結(jié)構(gòu)。 另一方面,ArrayList不允許您指定尺寸。 請參閱本教程,以了解有關(guān)如何在Java中使用多維數(shù)組的更多信息。

這是一張很好的幻燈片,突出顯示了Java中Array和ArrayList之間的所有重要區(qū)別:

Array和ArrayList之間的相似之處

到目前為止,您已經(jīng)看到了ArrayList和數(shù)組之間的區(qū)別,現(xiàn)在讓我們集中討論一些相似之處。 由于ArrayList在內(nèi)部使用數(shù)組,因此必然有很多相似之處,如下所示:

1.數(shù)據(jù)結(jié)構(gòu)

兩者都允許您使用Java存儲對象,并且兩者都是基于索引的數(shù)據(jù)結(jié)構(gòu),可提供O(1)性能來檢索元素,但是如果對數(shù)組進(jìn)行了排序并且使用了二進(jìn)制搜索,則沒有索引的搜索仍然是log(N) 算法 。

2.訂購

array和ArrayList都保持將元素添加到其中的順序。

3.搜索

您可以使用索引搜索元素,即O(1)否則,如果數(shù)組未排序,則可以使用線性搜索,這大約需要O(n)時間,也可以在Java中對數(shù)組進(jìn)行排序后使用二進(jìn)制搜索,這正在排序+ O(logN)。

4.空值

array和ArrayList都允許空值,但請記住只有對象數(shù)組才允許空基元數(shù)組,它們不存儲基元類型的默認(rèn)值,例如int為零,布爾false 。

5.重復(fù)

array和ArrayList都允許重復(fù)。 這也是編寫程序以從數(shù)組中找出重復(fù)項的常見的基于數(shù)組的編碼問題之一 。

6.表現(xiàn)

ArrayList模擬數(shù)組的性能,例如,如果您知道索引,則可以進(jìn)行O(1)訪問,但它具有額外的內(nèi)存開銷,因為它是一個對象,并且還擁有其他數(shù)據(jù)以自動調(diào)整ArrayList的大小。

7.零基索引

array和ArrayList都具有從零開始的索引,即第一個元素從第零個索引開始。

您應(yīng)該記住的最重要的區(qū)別是,數(shù)組本質(zhì)上是靜態(tài)的,即創(chuàng)建后就無法更改其大小,但是ArrayList是動態(tài)數(shù)組,如果ArrayList中的元素數(shù)大于調(diào)整大小閾值,則可以調(diào)整自身大小。 基于這種差異,如果事先知道大小并確定它不會改變,則應(yīng)該使用數(shù)組作為數(shù)據(jù)結(jié)構(gòu)來存儲對象;如果不確定,則只需使用ArrayList。

翻譯自: https://www.javacodegeeks.com/2016/01/9-differences-between-array-and-arraylist-in-java.html

總結(jié)

以上是生活随笔為你收集整理的Java中Array和ArrayList之间的9个区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美不卡一区二区三区 | 香蕉污视频在线观看 | 欧美一级特黄aa大片 | 久久人人添人人爽添人人片 | 亚洲啪视频 | 日韩三级视频在线播放 | 国产真实伦对白全集 | 国产在线美女 | 一区二区内射 | 美女隐私无遮挡网站 | 亚洲情趣 | 免费看黄网址 | 色婷婷综合久久 | 91精品久久久久久久久久入口 | 91精选视频 | 一区二区三区精品久久久 | 97免费观看视频 | 中国女人裸体乱淫 | 老湿机69福利区午夜x片 | 国内一区二区视频 | 欧美黄色一级生活片 | 亚洲丝袜中文字幕 | 久久老司机精品视频 | 老子影院午夜精品无码 | 国产一区综合 | 91精品又粗又猛又爽 | 国产女女 | 精品丰满人妻无套内射 | 欧美日韩综合视频 | 大乳女喂男人吃奶视频 | 欧美爱爱一区二区 | 中文字幕在线免费观看视频 | 久久青娱乐 | 美女又爽又黄 | 中文字幕日韩亚洲 | 91精品在线看 | 日韩成人福利 | 美女久久久久 | 亚洲中文字幕一区 | 黑人精品无码一区二区三区AV | 精品伦理一区二区 | 黄色片子一级 | 青青草在线免费观看 | 男女啪啪毛片 | 成人视屏在线观看 | 老熟妇仑乱视频一区二区 | 91视频看看| 日本一区二区三区免费视频 | 都市激情第一页 | 国产精品免费av | 精品98| 911福利视频 | 精品人妻一区二区三区免费看 | 日日干夜| 好姑娘在线观看高清完整版电影 | 精品久久久久久久无码 | 成人动漫久久 | 高清av网址 | 欧美熟妇激情一区二区三区 | 99热热99| 福利视频一区二区三区 | 麻豆三级在线观看 | 麻豆高清| 国产美女精品久久 | 亚洲孕交 | 奴色虐av一区二区三区 | 日韩精品字幕 | 两性午夜免费视频 | 国内免费毛片 | av免播放器 | 日韩久久不卡 | 国产日产精品一区二区三区 | 三级艳丽杨钰莹三级 | 亚洲欧美福利 | 日日操日日爽 | 一区二区三区成人 | 中文字幕在线视频免费播放 | 神马伦理视频 | 淫综合网| 国产精品久久久久三级无码 | 亚洲精品久久久狠狠狠爱 | 海角社区id| 超碰cc| www.狠狠撸.com| 天天色天天搞 | 欧美v日本 | 久久久久看片 | 毛片国产精品 | 在线操| 免费a v视频 | 国产偷自拍视频 | 蜜桃av中文字幕 | 伊人色av | 人人干人人澡 | 肉色丝袜小早川怜子av | 国产无人区码熟妇毛片多 | av片在线观看 | 亚洲啪啪网址 | 美国一区二区三区 |