??數(shù)組是一個很基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),幾乎所有的編程語言都有數(shù)組結(jié)構(gòu)的實(shí)現(xiàn)。雖然不盡完全相同,但是本質(zhì)上都是用來存放數(shù)據(jù)的一段連續(xù)的結(jié)構(gòu)。
Java中的數(shù)組:
??一段連續(xù)的內(nèi)存空間弹沽,在初始化時即指定了數(shù)組的長度,在初始化完成后的數(shù)組長度不可改變筋粗;數(shù)據(jù)可以存儲基本類型和包裝類型策橘,未賦值的數(shù)組元素為存儲類型的默認(rèn)值。
Java初始化數(shù)組時的內(nèi)存變化:
??Java在初始化一個數(shù)組時娜亿,在內(nèi)存中的Heap(堆)和Stack(棧)上各開辟了一處空間丽已,在Heap上的空間用于存放數(shù)組本身,在Stack上的空間用于存放數(shù)組引用實(shí)例买决,并指向Heap上的數(shù)組本身!
avatar
Java中的數(shù)組的特點(diǎn):
刪除慢:
??數(shù)組刪除元素時沛婴,被刪除元素的之后的元素都需要向前移動,因此速度慢督赤。
擴(kuò)展性差:
??數(shù)組的長度在初始化時即指定嘁灯,在初始化后無法更改,因此無法擴(kuò)展躲舌;但是可以new一個長度更大的新數(shù)組丑婿,然后將舊數(shù)組的元素全部拷貝到新數(shù)組中,并將引用指向新的數(shù)組來實(shí)現(xiàn)曲線擴(kuò)展没卸,但是這種方式消耗極大羹奉;JDK中的ArrayList就是采用的這種方式實(shí)現(xiàn)的集合擴(kuò)容機(jī)制。
Java中數(shù)組的有序數(shù)組與無序數(shù)組:
- 無序數(shù)組:指的是數(shù)組中的元素沒有按照某種特定的順組的數(shù)組约计,默認(rèn)按照插入先后進(jìn)行的排序
- 有序數(shù)組:指的是數(shù)組中的元素按照某種特定的順序進(jìn)行排序诀拭,如根據(jù)元素值的大小進(jìn)行排序的int[]數(shù)組
有序數(shù)組與無序數(shù)組的一些區(qū)別:
查找(這里指的是按照元素值進(jìn)行查找而不是按照下標(biāo)查找):
??有序數(shù)組的查找較無序數(shù)組的查找更快一些
擴(kuò)展:
算法的復(fù)雜度問題:
O(1)>O(logN)>O(N)>{O(N^2)}