原文发布时间为: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”

泛型Dictionary效率要大于HashTable!的更多相关文章

  1. 泛型Dictionary的用法详解

    泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的 ...

  2. C#中Dictionary、ArrayList、Hashtable和Array的区别

    IDictionary接口是所有字典类集合的基本接口,该接口与ICollection,IEnumerable接口是所有非泛型类集合的最基本的接口 IEnumerable接口用于公开枚举数,该枚举数支持 ...

  3. 自定义一个可以被序列化的泛型Dictionary<TKey,TValue>集合

    Dictionary是一个键值类型的集合.它有点像数组,但Dictionary的键可以是任何类型,内部使用Hash Table存储键和值.本篇自定义一个类型安全的泛型Dictionary<TKe ...

  4. c#重点[集合类型]异常,数组,集合ArrayList,List<>,hashTable,hashtable泛型(Dictionary)

    1.foreach[对一些数组或集合进行遍历] foreach(类型 变量名 in 集合对象){语句体} //定义一个数组 ,,,,, }; foreach(var i in sNum1) { Con ...

  5. 键值对Dictionary、KeyValuePair、Hashtable 简单使用。

    KeyValuePair是单个的键值对对象.KeyValuePair可用于接收combox选定的值. 例如:KeyValuePair<string, object> par = (KeyV ...

  6. Dictionary、SortedDictionary、Hashtable 、SortedList

    HashTable数据结构存在问题:空间利用率偏低.受填充因子影响大.扩容时所有的数据需要重新进行散列计算.虽然Hash具有O(1)的数据 检索效率,但它空间开销却通常很大,是以空间换取时间.所以Ha ...

  7. TypeScript笔记[5]泛型+Dictionary 转

    TypeScript笔记[5]泛型   在C++.C#.Java等主流编程语言中,一般对泛型编程提供了支持.合理利用泛型,可以提高开发效率.提升代码质量. 例如在C++编程语言中,常常利用下面的结构表 ...

  8. 收集数据至泛型Dictionary

    开发时,我们经常使用到泛型,不管是List<T>,还是Dictionary<T,V>,下面Insus.NET在测试一些功能,当使用到一些临时数据集时,有好几种方法把数据收集至D ...

  9. [转载] 散列表(Hash Table) 从理论到实用(下)

    转载自: 白话算法(6) 散列表(Hash Table) 从理论到实用(下) [澈丹,我想要个钻戒.][小北,等等吧,等我再修行两年,你把我烧了,舍利子比钻戒值钱.] ——自扯自蛋 无论开发一个程序还 ...

随机推荐

  1. swpan&expect交互脚本

    #!/usr/bin/expectset timeout 30set user USERNAMEset pass PASSWORDspawn sudo pg_dump npi -U admin -p ...

  2. DevOps - 日志分析 -ELK

    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-co ...

  3. 用dump为什么总会在前面出现/path/debug.php:193

    解决方案,在php.ini中的xdebug中加一行代码:xdebug.overload_var_dump=1

  4. jquery 省市区联动插件

    使用方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  5. MTCNN自己的学习理解

    MTCNN 流程 经过三个网络 P-Net,R-Net,O-Net 对于P-Net: P-Net是一个全卷积层,不涉及到全连接层,所以我们的输入图像的尺寸可以是不固定的. 对于P-Net来说,我们的输 ...

  6. 关于web.xml配置中的<url-pattern>

    标签<url-pattern> <url-pattern>是我们用Servlet做Web项目时需要经常配置的标签,例: <servlet><servlet-n ...

  7. oracle redo 重做日志文件

    以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习目标:1.解释重做日志文件的目的2.描述重做日志文件的结构3.学会控制日志切换与检查点4.多元化管理重做日志文件5 ...

  8. JAVA运行环境配置

    win10下,右击我的电脑-->高级系统设置-->高级-->环境变量-->系统变量 1新建 变量名   JAVA_HOME 变量值   C:\Program Files\Jav ...

  9. 大数运算:HDU-1042-N!(附N!位数的计算)

    解题心得: 这里使用了10000进制.很明显,因为是n!所以单个最大的数是10000*10000,使用万进制. 可以借鉴高精度的加法,单个乘了之后在进位. 很坑的一点,0!=1,数学不好WA了三次,尴 ...

  10. (转) Redis哨兵的详解

    1 哨兵的作用 哨兵是redis集群架构中非常重要的一个组件,主要功能如下: 1. 集群监控:负责监控redis master和slave进程是否正常工作 2. 消息通知:如果某个redis实例有故障 ...