红黑树SortedDictionary,Hashtable,Dictionary性能测试

发布时间 2023-04-01 22:31:45作者: TimeNoMuch
using System.Collections;
using System.Collections.Generic;

namespace HS;

public class HXTest{
    public const int k = 500_001;

    // 生成一个长度为50万的数组并初始化
    public static void Test()
    {
        int[] arrNum = new int[k];
        for (int i = 0; i <= k - 1; i++) arrNum[i] = i;
        // Array.Fill(rngNum,)

        Random rm = new Random();
        for (int i = 0; i <= k - 1; i++)
        {
            int rngNum = rm.Next(i, k);
            int temp = arrNum[i];
            arrNum[i] = arrNum[rngNum];
            arrNum[rngNum] = temp;
        }

        // 红黑树测试
        SortedDictionary<int, int> rbTree = new SortedDictionary<int, int>();
        long oldTime = DateTime.Now.Ticks;
        for (int i = 0; i <= k - 1; i++) rbTree.Add(arrNum[i], arrNum[i]);
        double useTime = (DateTime.Now.Ticks - oldTime) / 1000000.0D;
        System.Console.WriteLine($"红黑树插入50万数据,用时:{useTime}");
        // 红黑树随机删除
        oldTime = DateTime.Now.Ticks;
        for (int i = 0; i <= k - 1; i++) rbTree.Remove(arrNum[i]);
        useTime = (DateTime.Now.Ticks - oldTime) / 1000000.0D;
        System.Console.WriteLine($"红黑树随机删除50万数据,用时:{useTime}");

        // hashtable测试
        Hashtable hash = new Hashtable();
        oldTime = DateTime.Now.Ticks;
        for (int i = 0; i <= k - 1; i++) hash.Add(arrNum[i], arrNum[i]);
        useTime = (DateTime.Now.Ticks - oldTime) / 1000000.0D;
        System.Console.WriteLine($"HashTable插入50万数据,用时:{useTime}");
        // hashtable随机删除
        oldTime = DateTime.Now.Ticks;
        for (int i = 0; i <= k - 1; i++) hash.Remove(arrNum[i]);
        useTime = (DateTime.Now.Ticks - oldTime) / 1000000.0D;
        System.Console.WriteLine($"Hashtable随机删除50万数据,用时:{useTime}");

        // Dictionary测试
        Dictionary<int, int> dic = new Dictionary<int, int>();
        oldTime = DateTime.Now.Ticks;
        for (int i = 0; i < k; i++) dic.Add(arrNum[i], arrNum[i]);
        useTime = (DateTime.Now.Ticks - oldTime) / 1000000.0D;
        System.Console.WriteLine($"Dictionary插入50万数据,用时:{useTime}");
        // hashtable随机删除
        oldTime = DateTime.Now.Ticks;
        for (int i = 0; i <= k - 1; i++) dic.Remove(arrNum[i]);
        useTime = (DateTime.Now.Ticks - oldTime) / 1000000.0D;
        System.Console.WriteLine($"Dictionary随机删除50万数据,用时:{useTime}");


    }

}

运行第一次结果:

红黑树插入50万数据,用时:6.23631
红黑树随机删除50万数据,用时:4.7723
HashTable插入50万数据,用时:2.76351
Hashtable随机删除50万数据,用时:1.80389
Dictionary插入50万数据,用时:0.40448
Dictionary随机删除50万数据,用时:0.15417

运行第二次结果:

红黑树插入50万数据,用时:6.20091
红黑树随机删除50万数据,用时:4.76206
HashTable插入50万数据,用时:2.93451
Hashtable随机删除50万数据,用时:1.88527
Dictionary插入50万数据,用时:0.45485
Dictionary随机删除50万数据,用时:0.13004

运行第三次结果:

红黑树插入50万数据,用时:6.1666
红黑树随机删除50万数据,用时:4.56178
HashTable插入50万数据,用时:2.84281
Hashtable随机删除50万数据,用时:1.9362
Dictionary插入50万数据,用时:0.41732
Dictionary随机删除50万数据,用时:0.12609