zoukankan      html  css  js  c++  java
  • 泛型Dictionary效率要大于HashTable!

    原文发布时间为:2009-09-28 —— 来源于本人的百度文章 [由搬家工具导入]

    Dictionary,Hashtable, ArrayList, List学习

    Dictionary

    泛型的优点(C# 编程指南)

    定义泛型集合的命名空间:System.Collections.Generic

    C# 中典型的范型结构除了熟悉的 IList , HashTable之外还有一个并不常见的Dictionary集合。

    相比较而言,Dictionary的性能是最好的,也属于轻便型的集合。效率要大于HashTable,其主要原因是Dictionary支持强类型声明的。

    在公共语言运行库和 C# 语言的早期版本中,通用化是通过在类型与通用基类型 Object 之间进行强制转换来实现的,泛型提供了针对这种限制的解决方案。通过创建泛型类,您可以创建一个在编译时类型安全的集合。

    添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。

    对于客户端代码,与 ArrayList 相比,使用 List<T> 时添加的唯一语法是声明和实例化中的类型参数。虽然这稍微增加了些编码的复杂性,但好处是您可以创建一个比 ArrayList 更安全并且速度更快的列表,特别适用于列表项是值类型的情况。

    Dictionary 泛型类提供了从一组键到一组值的映射。字典中的每个添加项都由一个值及其相关联的键组成。通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary 类是作为一个哈希表来实现的。

    1、

    Dictionary<int, string> fruit = new Dictionary<int, string>();

             //加入重复键会引发异常

             fruit.Add(1, "苹果");

             fruit.Add(2, "桔子");

             fruit.Add(3, "香蕉");

             fruit.Add(4, "菠萝");

             //因为引入了泛型,所以键取出后不需要进行Object到int的转换,值的集合也一样

             foreach (int i in fruit.Keys)

               {

                   MessageBox.Show("键是:"+i.ToString()+ "值是:"+ fruit[i]);

        }

    2、

    Dictionary<string , string> fruit = new Dictionary<string, string>();

                //加入重复键会引发异常

                fruit.Add("1", "苹果");

                fruit.Add("2", "桔子");

                fruit.Add("3", "香蕉");

                fruit.Add("4", "菠萝");

                //因为引入了泛型,所以键取出后不需要进行Object到int的转换,值的集合也一样

                foreach (string i in fruit.Keys)

                {

                    MessageBox.Show("键是:"+i.ToString()+ "值是:"+ fruit[i]);

                }  

    =============================

    Hashtable用法

    在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.。

    在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
    在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
    从哈希表中移除所有元素: HashtableObject.Clear();
    判断哈希表是否包含特定键key: HashtableObject.Contains(key);

       Hashtable ht = new Hashtable();

       ht.Add("a", 123);

       ht.Add("b", 456);


       // 遍历哈希表需要用到DictionaryEntry Object

         foreach (DictionaryEntry de in ht)

          {

              MessageBox.Show(de.Key.ToString() + "   " + de.Value.ToString());

          }

       //对哈希表进行排序

        ArrayList akeys = new ArrayList(ht.Keys); //别忘了导入System.Collections

        akeys.Sort(); //按字母顺序进行排序

        foreach (string skey in akeys)

          {

              MessageBox.Show(skey + ":");

              MessageBox.Show(ht[skey].ToString());//排序后输出

          }

    ArrayList用法

    private static void AddToList(ArrayList list, string p)

            {

                if (list.Contains(p) == false)

                    list.Add(p);

            }

            private void button1_Click(object sender, EventArgs e)

            {

                ArrayList list = new ArrayList();

                AddToList(list, "Table1");

                AddToList(list, "Table4");

                AddToList(list, "Table1");

                AddToList(list, "Table3");

                AddToList(list, "Table2");

                AddToList(list, "Table2");

                foreach (string s in list)

                {

                    MessageBox.Show(s);

                }

           }

    List

    List<string> listStr = new List<string>();

                listStr.Add("123");

                listStr.Add("456");

                listStr.Add("789");

             MessageBox.Show(listStr[2]);//”789”

  • 相关阅读:
    gehealthcare
    访问 WebBrowser 中的 js 变量和 JSON 数据 IEBrowser [2]
    在 WebBrowser 的任意页面中安装 jQuery 操作页面元素 IEBrowser [4]
    .NET 服务器按钮控件轻松调用 Ajax JQueryElement [2]
    使 WebBrowser 更简单的新加和执行 js, 可安装 jQuery 脚本的 C# 开源代码 IEBrowser [1]
    在 WebBrowser 中通过 js 访问 .NET 类, 完成用户注册 IEBrowser [3]
    .NET 下的 jQuery UI 开源控件 JQueryElement, 简化 js 脚本编写, 提供更方便的 ajax 调用[1]
    在 .NET 中设置页面元素的 javascript 事件 IEBrowser [5]
    地图切片总结110916
    ArcGIS for silverlight 中 QueryTask查询结果限制(500)问题[转]
  • 原文地址:https://www.cnblogs.com/handboy/p/7158320.html
Copyright © 2011-2022 走看看