前兩篇本質上還是靜態陣列,靜態陣列容量是有限的。但有時我們無法預估將要使用的陣列有多大,太大太小都不好。解決方案:陣列容量是可伸縮的。本篇就是實現可伸縮的動態陣列
實現原理:
陣列增加/縮減:1 當發現不夠用或者過多時,開闢乙個newdata,容量是之前的data的兩倍/一半
2 將data原樣複製到newdata中
3 使data指向newdata
resize(newcapacity)
根據resize()傳入的引數值,可以變成兩倍或者0.5倍等等,所以可以進行擴容或者縮減容量
更改add方法,新增擴容功能
//在第index個位置新增乙個新元素
public
void
add(
int index, e e)
if(size == data.length)
//index之後的元素依次向後挪動,然後將e放到poz處,size增加1
//要被處理i的開始位置是index結束位置是size-1
for(
int i = size -
1; i >=index; i --
) data[index]
= e;
size ++;}
//實現擴容功能
public
void
resize
(int newcapacity)
data = newdata;
}
更改remove方法,新增縮減容量功能//刪除索引為index的某個元素,並且返回該元素的值
//刪除索引為index的某個元素,並且返回該元素的值
public e remove (
int index)
//index之後的元素依次向前挪動,size減1
//要被處理i的開始位置是size-1結束位置是index
for(
int i = index; i < size -
1; i ++
) size --
; data[size]
= null;
if(size == data.length /2)
return ret;
}
CH2 陣列類5 簡單的複雜度分析
簡單的時間複雜度分析 o 1 o n o lgn o nlogn o n 2 o讀大歐 o 大o描述的是演算法的執行時間和輸入資料之間的關係 n 元素個數 o 是乙個漸進時間複雜度,描述n趨近於無窮的情況下演算法的快慢 o n 代表演算法的執行時間和輸入資料n的個數是呈線性關係的,是乙個線性的演算法...
動態陣列類 例
定義一元素為整數的動態陣列類,並在主函式中呼叫各個功能 資料成員 指向元素首位址的指標 用於儲存動態申請的陣列空間 當前陣列的容量 當前元素的個數 成員函式 帶參 無參建構函式 無參的動態申請10個元素空間並改變當前陣列的容量 當前元素的個數值 帶參的按引數處理 在尾部增加一元素 修改指定位置上的元...
動態陣列 allocator 類
12.2 動態陣列 12.2.1 new 和陣列 1.分配乙個動態陣列即是在分配乙個new物件時在型別名之後加一對方括號,用來存放陣列大小,該數可以是任意表示式 也可以是0,只需是整形 無需是常量。陣列分配成功後返回乙個指向第乙個物件的指標。2.該分配的動態陣列並非是陣列型別,也就不能呼叫陣列的be...