【数据结构与算法】数组动态分配方式的思考
概述
之前編寫的順序表:
在我寫的第一個順序表里面,內(nèi)部維護(hù)的數(shù)組長度是定長的,為100,不存在擴(kuò)容和縮容的問題。然而如果順序表儲存了較少元素,會造成空間的較多冗余;如果順序表內(nèi)部數(shù)組空間滿,會發(fā)生上溢出,不過我們在線性表的project里定義了屬于順序表的ListException而不是Java自帶的“數(shù)組下標(biāo)的越界異常(java.lang.IndexOutOfBoundException)”。
但是順序表不應(yīng)該受到數(shù)組定長的限制,它應(yīng)該能做到看起來、用起來“長度可變”(雖然實(shí)際上是數(shù)組操作實(shí)現(xiàn)的)。所謂的“動態(tài)分配”、“長度可變”實(shí)際上是說:如果我們需要trim來調(diào)整長度,則重新申請一塊內(nèi)存,創(chuàng)建一個與順序表長度等長的數(shù)組,避免冗余(前提是保證不再輕易增加元素,否則還要另外開辟空間移動數(shù)據(jù));如果數(shù)組長度不足以滿足需要,我們需要申請開辟更大的內(nèi)存空間創(chuàng)建一個容量更大的數(shù)組,將原有元素copy過去。
動態(tài)調(diào)整容量的操作我已經(jīng)在順序表2.0中調(diào)整了:
trim()的解決方案
我自己做的trim的實(shí)現(xiàn)代碼:
@SuppressWarnings總結(jié)
以上是生活随笔為你收集整理的【数据结构与算法】数组动态分配方式的思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JavaScript】Canvas绘制
- 下一篇: 【OJ】洛谷试炼场の新手村整合(Java