数据结构特性解析 (一) 数组
前言
數(shù)組是java中最基本的數(shù)據(jù)結(jié)構(gòu),有很多更高級(jí)的數(shù)據(jù)接口實(shí)現(xiàn)方式都是使用的數(shù)組,所以了解數(shù)組是很重要的
描述
數(shù)組是一個(gè)對(duì)象,內(nèi)部有一塊連續(xù)的內(nèi)存,自身只占用很小的內(nèi)存,其他位置都是根據(jù)長(zhǎng)度和類(lèi)型而分配的值對(duì)象或者引用值對(duì)象
特點(diǎn)
1. 數(shù)組長(zhǎng)度在初始化時(shí)確定且無(wú)法修改
由上圖可見(jiàn),數(shù)組并沒(méi)有add或修改長(zhǎng)度的方法
2.數(shù)組每個(gè)位置所占的內(nèi)存大小是在初始化時(shí)固定的
數(shù)組中存儲(chǔ)對(duì)象都是存儲(chǔ)的其引用值,在同一個(gè)環(huán)境下(32位一般4個(gè)字節(jié),64位4到8個(gè)字節(jié))引用值的大小都是一樣的,因此對(duì)象數(shù)組每個(gè)位置所占的內(nèi)存大小也是一樣的
而由于64位地址比32位地址更大,所以在64位環(huán)境下,對(duì)象數(shù)組也會(huì)比32位環(huán)境下占用的空間更大
如果存儲(chǔ)的是基本類(lèi)型的話(huà),則每個(gè)位置所占用的大小都是該基本數(shù)據(jù)類(lèi)型的大小
ps:基本數(shù)據(jù)占用內(nèi)存大小:https://blog.csdn.net/ccw0054/article/details/79082679
3.數(shù)組是一個(gè)創(chuàng)建在堆內(nèi)存中的對(duì)象,并且內(nèi)存占用是連續(xù)的
由于數(shù)組的前兩個(gè)特性,因此被設(shè)計(jì)為內(nèi)存連續(xù)的,這樣查找速度更快(因?yàn)槊總€(gè)位置大小固定,并且位置連續(xù),所以只需要通過(guò)向陣列頭部的地址添加合適的偏移來(lái)找到需要的內(nèi)存地址)
但是這樣的設(shè)計(jì)也會(huì)使新建大數(shù)組時(shí)尋找不到合適的內(nèi)存空間(有可能空間足夠,但不是連續(xù)的)而引發(fā)內(nèi)存重排序(gc?)?? 有待考究
圖示(由于堆的特性和對(duì)象自動(dòng)回收,很有可能會(huì)出現(xiàn)下面圖示的情況):
如上圖,想創(chuàng)建一個(gè)長(zhǎng)度為5的數(shù)組,可是堆內(nèi)存中并沒(méi)有一塊連續(xù)的長(zhǎng)度夠的內(nèi)存,因此可能會(huì)引發(fā)內(nèi)存重排序(gc?)?,然后使內(nèi)存整齊,并騰出足夠的連續(xù)的空間,可以創(chuàng)建出對(duì)應(yīng)的數(shù)組,因此數(shù)組也是一個(gè)對(duì)內(nèi)存要求嚴(yán)格的數(shù)據(jù)結(jié)構(gòu)
4.數(shù)組隨機(jī)查找比較快
因?yàn)樘匦?,數(shù)組根據(jù)索引的方式去查找數(shù)據(jù),會(huì)比較快,不用進(jìn)行循環(huán)或多次尋址
而遍歷查詢(xún)則需要遍歷索引來(lái)循環(huán)從數(shù)組中取出
5.數(shù)組支持嵌套
比如:? int[][] ints =new int[10][10];//一個(gè)10*10的二維數(shù)組
取用第一層數(shù)組的第5個(gè)里的第1個(gè):? int i =?ints[4][0];
ps:也支持多層嵌套,叫做n維數(shù)組,因?yàn)槠綍r(shí)用不到,所以就不寫(xiě)了
下一篇:?數(shù)據(jù)結(jié)構(gòu)特性解析 (二) ArrayList
如有錯(cuò)誤或補(bǔ)充,請(qǐng)各位大佬指出,我會(huì)盡快修改
總結(jié)
以上是生活随笔為你收集整理的数据结构特性解析 (一) 数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓UI图分离器(支持ios@2x3x图
- 下一篇: 安卓修改动画效果--动画差值器TimeI