常用陣列效率比較

2021-09-08 21:01:57 字數 4895 閱讀 5129

測試平台:

奔騰1.6g 雙核cpu

1g記憶體

vs2008 除錯環境測試。

一、arraylist (100w,1w)

stopwatch timer 

=new

stopwatch();

timer.start();

system.collections.arraylist al 

=new

system.collections.arraylist();

for(

inti =0

; i 

<

1000000

; i++

)timer.stop();

console.write(timer.elapsedmilliseconds.tostring() +"

\t");stopwatch timer1 

=new

stopwatch();

timer1.start();

for(

inti =0

; i 

<

10000

; i++

)timer1.stop();

console.writeline(timer1.elapsedmilliseconds.tostring());

98    775

160    891

107    773

193    769

二、hashtable (100w,1w)

stopwatch timer 

=new

stopwatch();

timer.start();

system.collections.hashtable ht 

=new

system.collections.hashtable();

for(

inti =0

; i 

<

1000000

; i++

)timer.stop();

console.write(timer.elapsedmilliseconds.tostring() +"

\t");stopwatch timer1 

=new

stopwatch();

timer1.start();

for(

inti =0

; i 

<

10000

; i++

)timer1.stop();

console.writeline(timer1.elapsedmilliseconds.tostring());}

375 0

673 0

540 0

495 0

把timer1提高到100萬(hashtable (100w,100w))

389 139

616 277

516 140

610 277

三、hashset (100w,100w)

stopwatch timer 

=new

stopwatch();

timer.start();

system.collections.generic.hashset

<

int>

ht =

newsystem.collections.generic.hashset

<

int>

();for

(inti =

0; i 

<

1000000

; i++

)timer.stop();

console.write(timer.elapsedmilliseconds.tostring() +"

\t");stopwatch timer1 

=new

stopwatch();

timer1.start();

for(

inti =0

; i 

<

1000000

; i++

)timer1.stop();

console.writeline(timer1.elapsedmilliseconds.tostring());

89 32

79 32

79 32

117 31

四、list (100w,1w)

stopwatch timer 

=new

stopwatch();

timer.start();

system.collections.generic.list

<

int>

ht =

newsystem.collections.generic.list

<

int>

();for

(inti =

0; i 

<

1000000

; i++

)timer.stop();

console.write(timer.elapsedmilliseconds.tostring() +"

\t");stopwatch timer1 

=new

stopwatch();

timer1.start();

for(

inti =0

; i 

<

10000

; i++

)timer1.stop();

console.writeline(timer1.elapsedmilliseconds.tostring());

16 379

19 392

18 403

18 392

把list換成list

96 945

157 1033

106 909

193 910

換成string,i.tostring()

496 1238

531 1190

572 1246

536 1258

五、dictionary (100w,100w)

stopwatch timer 

=new

stopwatch();

timer.start();

system.collections.generic.dictionary

<

int, 

int>

ht =

newsystem.collections.generic.dictionary

<

int, 

int>

();for

(inti =

0; i 

<

1000000

; i++

)timer.stop();

console.write(timer.elapsedmilliseconds.tostring() +"

\t");stopwatch timer1 

=new

stopwatch();

timer1.start();

for(

inti =0

; i 

<

1000000

; i++

)timer1.stop();

console.writeline(timer1.elapsedmilliseconds.tostring());

113 35

125 34

124 34

126 34

六、dictionary linq查詢 (100w,100w)

用個linq試試

stopwatch timer 

=new

stopwatch();

timer.start();

system.collections.generic.dictionary

<

int, 

int>

ht =

newsystem.collections.generic.dictionary

<

int, 

int>

();for

(inti =

0; i 

<

1000000

; i++

)timer.stop();

console.write(timer.elapsedmilliseconds.tostring() +"

\t");stopwatch timer1 

=new

stopwatch();

timer1.start();

for(

inti =0

; i 

<

1000000

; i++

)timer1.stop();

console.writeline(timer1.elapsedmilliseconds.tostring());

112 177

107 78

125 70

107 82

結論:1、如果是使用快取的話,那麼3.5帶來的單泛型集合的hashset可以替代list了。雖然載入速度慢一點,但是查詢速度要比list泛型快很多。要注意到,上述測試list的查詢時萬級的,而hashset是百萬級

2、dictionary泛型可以替換掉hashtable了,雖然如果在字元或者object型別下可能會沒這麼明顯。但是在數字型別的匹配上,dictionary比hashtable大概快了2倍,而這個開銷估計是hashtable的裝箱造成的。

3、linq還是要慢一些

陣列去重,效率比較

let arr1 array.from new array 100000 x,index let arr2 array.from new array 50000 x,index 寫一下方法中的去重方法 function distinct1 let start new date gettime con...

陣列和鍊錶插入效率比較

陣列和鍊錶將物件插入指定位置時,大致可以分為兩個步驟 1 找到要插入元素的位置 2 進行插入操作 可以得到等式 找到位置所需時間 插入所需時間 將物件插入指定位置所需總時間 由此可以先假設幾個值 找到插入元素的位置涉及的變數 要插入的位置為z 獲取乙個物件引用所需時間m 進行插入操作涉及的變數 移動...

演算法效率比較

題目 針對陣列a和陣列b,兩個陣列的元素內容相同,不過陣列a是已經排序的,陣列b是亂序的,針對陣列的中位數,存在以下兩組程式,比較其效率並分析原因。int g int main for int i 0 i n i 背景知識 當包含流水線技術的處理器處理分支指令時就會遇到乙個問題,根據判定條件的真 假...