无聊对比了几种容器的操作:LIST<> ARRAYLIST HASH表,数组,嘿嘿


最近无聊,对比了一下几种容器控件,也记录一下,下次自已好提醒下,现在内存这么便宜,还是提倡是使用哈希表,而LIST<>集合也不错,但学是慢了
测试数据第一次为一W条,第二次为十W条,
时间是以微秒计,如以下这样记数
  long StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                arr.Add(i);
            }
            long EndTime = DateTime.Now.Ticks;

            Console.WriteLine("ArryList添加执行时间:" + (EndTime - StartTime));

            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                hs.Add(i, "我是" + i);
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("Hashtable添加执行时间:" + (EndTime - StartTime));
数据为1W条的时候
yellowyu

ArryList添加执行时间:            0
Hashtable添加执行时间:         156250
List添加执行时间:                  0
数组添加执行时间:                 0
ArryList查找执行时间:           7968750
Hashtable查找执行时间:         0
List查找执行时间:                  3906250
数组查找执行时间:                 3906250
ArryList删除执行时间:            937500
Hashtable删除执行时间:         0
List删除执行时间:                  468750

而这时候的速度还可以原谅,毕竟7968750微秒还可以忍受,这是测一W条数据的时候,但当你把数据提升到十W条的时候,下面的数据你就知道无法忍受了
而添加时,肯定是哈希表是最花时间的,因为要建这么一张索引表,还有分配那部分空间
但是查找上,哈希表是最快的,LIST第二,数组的顺序查找,也算是比较慢的查找,跟LIST差不多,如果折半可能会快三倍到五倍吧,而ARRAYLIST是最慢的
在删除上,不明白为什么时间比查找还要少,有明白的帮忙讲下,嘿嘿

而当把数据查找提到十W条的时候
数据是以下这样的
yellowyu

ArryList添加执行时间:     156250
Hashtable添加执行时间:  1093750
List添加执行时间:           0
数组添加执行时间:          0
ArryList查找执行时间:     823125000
Hashtable查找执行时间:  156250
List查找执行时间:           430781250
数组查找执行时间:          394062500
ArryList删除执行时间:     124843750
Hashtable删除执行时间:  0
List删除执行时间:           53125000

我想谁也忍受不了那个程序运行个查找要823125000微秒吧,太变态了吧
在需要大量查找时,我更喜欢用HASH表,而LIST集合由于保存着值类型,使用起来相当方便,也是比较喜欢的,我讨厌死Arraylist了

大家可是在自已的机子上试试,我的本本是双核1.6
程序代码是:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("yellowyu");
            Console.ReadLine();
            int i;
            System.Collections.Hashtable hs = new System.Collections.Hashtable();
            System.Collections.ArrayList arr = new System.Collections.ArrayList();
            List<int> IntList = new List<int>();
            int[] a = new int[100000];


            long StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                arr.Add(i);
            }
            long EndTime = DateTime.Now.Ticks;

            Console.WriteLine("ArryList添加执行时间:" + (EndTime - StartTime));

            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                hs.Add(i, "我是" + i);
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("Hashtable添加执行时间:" + (EndTime - StartTime));


            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                IntList.Add(i);
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("List添加执行时间:" + (EndTime - StartTime));

            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                a[i] = i;
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("数组添加执行时间:" + (EndTime - StartTime));


            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                arr.Contains(i);
            }
            EndTime = DateTime.Now.Ticks;

            Console.WriteLine("ArryList查找执行时间:" + (EndTime - StartTime));

            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                hs.Contains(i);
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("Hashtable查找执行时间:" + (EndTime - StartTime));


            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                IntList.Contains(i);
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("List查找执行时间:" + (EndTime - StartTime));

            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                for (int q = 0; q < 100000; q++)
                {
                    if (i == a[q])
                    {
                        break;
                    }
                }
            }

            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("数组查找执行时间:" + (EndTime - StartTime));

            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                arr.Remove(i);
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("ArryList删除执行时间:" + (EndTime - StartTime));

            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                hs.Remove(i);
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("Hashtable删除执行时间:" + (EndTime - StartTime));

            StartTime = DateTime.Now.Ticks;
            for (i = 0; i < 100000; i++)
            {
                IntList.Remove(i);
            }
            EndTime = DateTime.Now.Ticks;
            Console.WriteLine("List删除执行时间:" + (EndTime - StartTime));

            Console.ReadLine();
        }
    }
}





posted @ 2008-03-26 22:21  yellowyu  阅读(1040)  评论(4编辑  收藏  举报