C 深入研究ArrayList動態陣列自動擴容原理

2022-07-17 08:51:11 字數 1433 閱讀 4223

1void

test1()

29 console.writeline("

count =

" +arraylist.count);

10 console.writeline("

capacity =

" +arraylist.capacity);

11 }

1

static

void main(string

args)

2

新建乙個test 類,新增乙個方法test1(),新增如上**,在main方法中呼叫。

輸出結果為:count = 3

capacity = 4

如果length = 0,輸出結果為

count = 0

capacity = 0

如果length = 1,輸出結果為

count = 1

capacity = 4

如果length = 4,輸出結果為

count = 4

capacity = 4

如果length = 5,輸出結果

count = 5

capacity = 8

先介紹下arraylist的兩個欄位就不難理解為什麼會輸出這樣的結果。

count欄位含義為動態陣列的實際長度,capacity含義為動態陣列的實際容量,這兩個欄位的含義是不同的。我們借助反編譯工具來一**竟。

public

virtual

int add(object

value)

this._items[this._size] =value;

this._version++;

int num = this

._size;

this._size = num + 1

;            //否則長度+1,容量不變

return

num;

}

這是arraylist原始碼中的add方法,_size相當於count,  _items.length相當於capacity.我們把注意力放在這一行**:

this.ensurecapacity(this._size + 1);

1

private

void ensurecapacity(int

min)210

if (num 1114

this.capacity =num;15}

16 }

把注意力放在第5行發現,如果容量為0,則設定為4,否則翻倍。

以上就是動態陣列arraylist自動擴容原理。

flex Bindable深入研究

bindable 元資料標籤,它在 中的作用就是向編譯器提供如何編譯程式的資訊。它的最大作用是使程式元件間的資料同步變得容易。在開發中通常用上bindable作用在檢視控制項上,如給它繫結乙個物件,則以後只需要在邏輯層更改這個物件的值,則檢視層的控制項資料會自動更新 同步 而不再需要手動去更新檢視。...

URLRequest深入研究

urlrequest 的乙個例項 html view plain copy create the request.所構建的nsurlrequest具有乙個依賴於快取響應的特定策略,cachepolicy取得策略,timeoutinterval取得超時值 nsurlrequest therequest...

深入研究AsyncTask

asynctask提供了一種在後台執行操作而在ui執行緒顯示結果的方式,而且開發者不必操作執行緒或者handler.乙個asynctask定義了三種泛型分別是params,progress,result,還有四個函式分別是onpreexecute doinbackground onprogressu...