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