zoukankan      html  css  js  c++  java
  • c# 哈希表

    最近翻开一下c#的基础书,发现c#的哈希表我重来没用过。

    理解一番,觉得和dictionary有点相像,都是键值对(key-value)的形式。

    网上查询了一番,下面说说简单介绍下哈希表Hashtable 。

    哈希表(hashtable)和字典表(dictionary)效率对比:

    Hashtable hashtable = new Hashtable();
    Dictionary<string, int> dictionary = new Dictionary<string, int>();
    int countNum = 1000000;
    DateTime startTime;
    DateTime endTime;
    startTime = DateTime.Now;
    for (int i = 0; i < countNum; i++)
    {
    hashtable.Add(i.ToString(), i);
    }
    endTime = DateTime.Now;
    Console.WriteLine("给哈希表赋值:" + (endTime - startTime).Milliseconds); //输出: 796

    startTime = DateTime.Now;
    for (int i = 0; i < countNum; i++)
    {
    dictionary.Add(i.ToString(), i);
    }
    endTime = DateTime.Now;
    Console.WriteLine("字典类型赋值:" + (endTime - startTime).Milliseconds); //输出: 448

    startTime = DateTime.Now;
    for (int i = 0; i < countNum; i++)
    {
    hashtable.ContainsKey(i.ToString());
    }
    endTime = DateTime.Now;
    Console.WriteLine("输出哈希表值:" + (endTime - startTime).Milliseconds); //输出: 268

    startTime = DateTime.Now;
    for (int i = 0; i < countNum; i++)
    {
    dictionary.ContainsKey(i.ToString());
    }
    endTime = DateTime.Now;
    Console.WriteLine("输出字典类型值:" + (endTime - startTime).Milliseconds); //输出: 183

    结论:添加数据时,dictionary快,频繁调用数据时Dictionary快。Dictionary<K,V>是泛型的,当K或V是值类型时,其速度远远超过Hashtable。

    由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代.
    [1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
    [2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
    [3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.

    不过有人认为:我认为应该始终使用Dictionary<K, V>,即使要用Hashtable了,也可以用Dictionary<object, object>来替代。

  • 相关阅读:
    常用
    饼图
    箱体图
    提取csv文件中需要的部分
    从文件夹中找需要的信息 并生成csv文件
    在磁盘中找到关键字文件 并删除
    正方形棋盘格
    秒表
    【题解】【BZOJ】AGC008F Blackout
    【题解】【BZOJ】BZOJ2281 黑白棋
  • 原文地址:https://www.cnblogs.com/BeeSnow/p/7989834.html
Copyright © 2011-2022 走看看