測試平台:
奔騰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 背景知識 當包含流水線技術的處理器處理分支指令時就會遇到乙個問題,根據判定條件的真 假...