ArrayList 和 HashTable 和 HashSet 和 List 和 Dictionary 之间关于插入查询的时间比较

本文通过实验对比了不同集合类在C#中的性能表现,包括ArrayList、List、HashSet、Hashtable及Dictionary等,尤其关注了加载速度与查询效率。
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还是要慢一些。");
        }

        

    }
 
 
 
 
 
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值