class Program { static void Main(string[] args) { Collections coll = new Collections(); coll.ArrayList(); coll.HashTable(); coll.HashSet(); coll.List(); coll.Dictionary(); coll.DictionaryLinq(); Console.Read(); }public class Collections { public void ArrayList() { Console.WriteLine("ArrayList (100W,1W) "); Stopwatch timer = new Stopwatch(); timer.Start(); System.Collections.ArrayList al = new System.Collections.ArrayList(); for (int i = 0; i < 1000000; i++) { al.Add(i); } timer.Stop(); Console.Write(timer.ElapsedMilliseconds.ToString() + "/t"); Stopwatch timer1 = new Stopwatch(); timer1.Start(); for (int i = 0; i < 10000; i++) { al.Contains(i); } timer1.Stop(); Console.WriteLine(timer1.ElapsedMilliseconds.ToString()); } public void HashTable() { Console.WriteLine("Hashtable (100W,100W)"); Stopwatch timer = new Stopwatch(); timer.Start(); System.Collections.Hashtable ht = new System.Collections.Hashtable(); for (int i = 0; i < 1000000; i++) { ht.Add(i, i); } timer.Stop(); Console.Write(timer.ElapsedMilliseconds.ToString() + "/t"); Stopwatch timer1 = new Stopwatch(); timer1.Start(); for (int i = 0; i < 1000000; i++) { ht.ContainsKey(i); } timer1.Stop(); Console.WriteLine(timer1.ElapsedMilliseconds.ToString()); } public void HashSet() { Console.WriteLine("HashSet (100W,100W)"); Stopwatch timer = new Stopwatch(); timer.Start(); System.Collections.Generic.HashSet ht = new System.Collections.Generic.HashSet(); for (int i = 0; i < 1000000; i++) { ht.Add(i); } timer.Stop(); Console.Write(timer.ElapsedMilliseconds.ToString() + "/t"); Stopwatch timer1 = new Stopwatch(); timer1.Start(); for (int i = 0; i < 1000000; i++) { ht.Contains(i); } timer1.Stop(); Console.WriteLine(timer1.ElapsedMilliseconds.ToString()); } public void List() { Console.WriteLine("List (100W,1W)"); Stopwatch timer = new Stopwatch(); timer.Start(); System.Collections.Generic.List ht = new System.Collections.Generic.List(); for (int i = 0; i < 1000000; i++) { ht.Add(i); } timer.Stop(); Console.Write(timer.ElapsedMilliseconds.ToString() + "/t"); Stopwatch timer1 = new Stopwatch(); timer1.Start(); for (int i = 0; i < 10000; i++) { ht.Contains(i); } timer1.Stop(); Console.WriteLine(timer1.ElapsedMilliseconds.ToString()); } public void Dictionary() { Console.WriteLine("Dictionary (100W,100W)"); Stopwatch timer = new Stopwatch(); timer.Start(); System.Collections.Generic.Dictionary ht = new System.Collections.Generic.Dictionary(); for (int i = 0; i < 1000000; i++) { ht.Add(i, i); } timer.Stop(); Console.Write(timer.ElapsedMilliseconds.ToString() + "/t"); Stopwatch timer1 = new Stopwatch(); timer1.Start(); for (int i = 0; i < 1000000; i++) { ht.ContainsKey(i); } timer1.Stop(); Console.WriteLine(timer1.ElapsedMilliseconds.ToString()); } public void DictionaryLinq() { Console.WriteLine("DictionaryLinq (100W,100W)"); Stopwatch timer = new Stopwatch(); timer.Start(); System.Collections.Generic.Dictionary ht = new System.Collections.Generic.Dictionary(); for (int i = 0; i < 1000000; i++) { ht.Add(i, i); } timer.Stop(); Console.Write(timer.ElapsedMilliseconds.ToString() + "/t"); Stopwatch timer1 = new Stopwatch(); timer1.Start(); for (int i = 0; i < 1000000; i++) { ht.Where(c => c.Key == i); } timer1.Stop(); Console.WriteLine(timer1.ElapsedMilliseconds.ToString()); //Console.WriteLine("结论:+/n 1、如果是使用缓存的话,那么3.5带来的单泛型集合的HashSet可以替代List了。虽然载入速度慢一点,但是查询速度要比List泛型快很多。要注意到,上述测试List的查询时万级的,而HashSet是百万级+/n 2、Dictionary泛型可以替换掉Hashtable了,虽然如果在字符或者object类型下可能会没这么明显。但是在数字类型的匹配上,Dictionary比Hashtable大概快了2倍,而这个开销估计是Hashtable的装箱造成的。+/n 3、Linq还是要慢一些。"); } }
ArrayList 和 HashTable 和 HashSet 和 List 和 Dictionary 之间关于插入查询的时间比较
最新推荐文章于 2024-03-01 16:41:50 发布
