日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩欧美在线播放 | 欧美激情在线免费 | 亚洲激情另类 | 黄色网页入口 | 日本婷婷 | 亚洲精品久久久蜜桃 | 总裁憋尿呻吟双腿大开憋尿 | 久久99精品国产91久久来源 | 影音先锋在线观看视频 | 天天干天天天 | 91麻豆国产 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 日本精品不卡 | 欧美中文字幕在线 | 韩国裸体网站 | 国产无套视频 | 欧美精品小视频 | 久久精品国产亚洲AV高清综合 | 亚洲成人黄色网址 | 精品久久久久久久久久久久久久久 | 午夜影院在线观看免费 | 在线观看不卡的av | 国产一久久 | 国产麻豆电影在线观看 | 久久99综合| 亚洲怡红院av | 日韩亚洲欧美在线观看 | 亚洲人久久 | heyzo亚洲 | 亚洲人成在线免费观看 | 美女高潮黄又色高清视频免费 | 久久一级片 | 午夜资源 | 中国字幕一色哟哟 | 国产xxxxx | 国产伦视频| 久久久久亚洲无码 | 999久久久国产| 天天看片天天干 | 高清二区| 四虎影视成人永久免费观看亚洲欧美 | 国产欧美视频在线 | www.欧美国产 | 天天操天天干天天舔 | 国产高清视频在线观看 | 日韩黄网站 | 亚洲制服另类 | 久操影视| 久久久久久久久久久电影 | www.在线观看av | 成人精品亚洲 | 男人激情网 | 婷婷射图 | 免费高清av | 99产精品成人啪免费网站 | 久久色在线视频 | 女子spa高潮呻吟抽搐 | 激情总合网 | 日韩黄 | 噜噜噜久久,亚洲精品国产品 | 日韩作爱| 国产一区二区电影 | 国产精品成人免费视频 | 亚洲欧美日韩在线播放 | 国产极品美女高潮无套嗷嗷叫酒店 | 婷婷综合| 中文字幕1区 | 在线播放精品 | 亚洲第一视频网 | 国产香蕉尹人视频在线 | 丰满人妻老熟妇伦人精品 | 一级做a爰片毛片 | av片免费| 欧美做受69 | av男女| 琪琪伦伦影院理论片 | 小情侣高清国产在线播放 | 欧美一级做a爰片免费视频 成人激情在线观看 | 欧美色炮 | 亚洲xx在线 | 免费看成人av | 国产精品亚洲αv天堂无码 伊人性视频 | 中出在线播放 | 亚洲国产精品综合 | 午夜免费一区二区 | 国产美女免费看 | 国产日韩精品一区二区三区在线 | 成人av影视在线 | 日本 奴役 捆绑 受虐狂xxxx | 成人小视频免费观看 | 祥仔视觉av | 极品五月天 | 国产在线www | 日本一区二区三区视频免费看 | 欧美成人做爰大片免费看黄石 | 四虎在线网址 | 特级毛片a | 国产精品毛片一区视频播 | 东京av在线|