.net - HashSet vs. List performance -


it's clear search performance of generic hashset<t> class higher of generic list<t> class. compare hash-based key linear approach in list<t> class.

however calculating hash key may take cpu cycles, small amount of items linear search can real alternative hashset<t>.

my question: break-even?

to simplify scenario (and fair) let's assume list<t> class uses element's equals() method identify item.

a lot of people saying once size speed concern hashset<t> beat list<t>, depends on doing.

let's have list<t> ever have on average 5 items in it. on large number of cycles, if single item added or removed each cycle, may better off using list<t>.

i did test on machine, and, well, has very small advantage list<t>. list of short strings, advantage went away after size 5, objects after size 20.

1 item list strs time: 617ms 1 item hashset strs time: 1332ms  2 item list strs time: 781ms 2 item hashset strs time: 1354ms  3 item list strs time: 950ms 3 item hashset strs time: 1405ms  4 item list strs time: 1126ms 4 item hashset strs time: 1441ms  5 item list strs time: 1370ms 5 item hashset strs time: 1452ms  6 item list strs time: 1481ms 6 item hashset strs time: 1418ms  7 item list strs time: 1581ms 7 item hashset strs time: 1464ms  8 item list strs time: 1726ms 8 item hashset strs time: 1398ms  9 item list strs time: 1901ms 9 item hashset strs time: 1433ms  1 item list objs time: 614ms 1 item hashset objs time: 1993ms  4 item list objs time: 837ms 4 item hashset objs time: 1914ms  7 item list objs time: 1070ms 7 item hashset objs time: 1900ms  10 item list objs time: 1267ms 10 item hashset objs time: 1904ms  13 item list objs time: 1494ms 13 item hashset objs time: 1893ms  16 item list objs time: 1695ms 16 item hashset objs time: 1879ms  19 item list objs time: 1902ms 19 item hashset objs time: 1950ms  22 item list objs time: 2136ms 22 item hashset objs time: 1893ms  25 item list objs time: 2357ms 25 item hashset objs time: 1826ms  28 item list objs time: 2555ms 28 item hashset objs time: 1865ms  31 item list objs time: 2755ms 31 item hashset objs time: 1963ms  34 item list objs time: 3025ms 34 item hashset objs time: 1874ms  37 item list objs time: 3195ms 37 item hashset objs time: 1958ms  40 item list objs time: 3401ms 40 item hashset objs time: 1855ms  43 item list objs time: 3618ms 43 item hashset objs time: 1869ms  46 item list objs time: 3883ms 46 item hashset objs time: 2046ms  49 item list objs time: 4218ms 49 item hashset objs time: 1873ms 

here data displayed graph:

enter image description here

here's code:

static void main(string[] args) {     int times = 10000000;       (int listsize = 1; listsize < 10; listsize++)     {         list<string> list = new list<string>();         hashset<string> hashset = new hashset<string>();          (int = 0; < listsize; i++)         {             list.add("string" + i.tostring());             hashset.add("string" + i.tostring());         }          stopwatch timer = new stopwatch();         timer.start();         (int = 0; < times; i++)         {             list.remove("string0");             list.add("string0");         }         timer.stop();         console.writeline(listsize.tostring() + " item list strs time: " + timer.elapsedmilliseconds.tostring() + "ms");           timer = new stopwatch();         timer.start();         (int = 0; < times; i++)         {             hashset.remove("string0");             hashset.add("string0");         }         timer.stop();         console.writeline(listsize.tostring() + " item hashset strs time: " + timer.elapsedmilliseconds.tostring() + "ms");         console.writeline();     }       (int listsize = 1; listsize < 50; listsize+=3)     {         list<object> list = new list<object>();         hashset<object> hashset = new hashset<object>();          (int = 0; < listsize; i++)         {             list.add(new object());             hashset.add(new object());         }          object objtoaddrem = list[0];          stopwatch timer = new stopwatch();         timer.start();         (int = 0; < times; i++)         {             list.remove(objtoaddrem);             list.add(objtoaddrem);         }         timer.stop();         console.writeline(listsize.tostring() + " item list objs time: " + timer.elapsedmilliseconds.tostring() + "ms");            timer = new stopwatch();         timer.start();         (int = 0; < times; i++)         {             hashset.remove(objtoaddrem);             hashset.add(objtoaddrem);         }         timer.stop();         console.writeline(listsize.tostring() + " item hashset objs time: " + timer.elapsedmilliseconds.tostring() + "ms");         console.writeline();     }      console.readline(); } 

Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -