原文发布时间为: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. 十九、MySQL GROUP BY 语句

    MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT ...

  2. gitLab 服务器搭建 (自己服务器上搭建gitLab)

    环境 lunix(ubuntu) 1:添加文件 在   /etc/apt/sources.list.d/gitlab-ce.list 中添加一行 deb https://mirrors.tuna.ts ...

  3. Vue之简易的留言板功能

    今天我将带大家通过Vue的todolist案例来完成一个简易的网页留言板! LES'T GO! 首先我们需要在页面上搭建一个input文本输入框,并设置提交按钮,通过循环指令来完成输入框的信息提交! ...

  4. 并查集:HDU4496-D-City(倒用并查集)

    D-City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submis ...

  5. 笔记-python-selenium,phantomjs

    笔记-python-selenium,phantomjs 1.      简介 1.1.    selenium selenium是一款自动化测试工具,支持多种语言 为什么爬虫要使用selenium呢 ...

  6. Curl之解决中文乱码

    利用iconv命令 curl http://www.baidu.com | iconv -f gb2312 -t utf-8 iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件.它的 ...

  7. OpenCV学习笔记(四) Mat的简单操作

    转自:OpenCV Tutorial: core 模块. 核心功能 改变图像对比度和亮度:convertTo 可以把  看成源图像像素,把  看成输出图像像素.这样一来,调整亮度和对比度的方法可表示为 ...

  8. 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式

    1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1469  Solved: ...

  9. 常用的一些api

    发送手机短信 // 发送短信给安全号码 SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phon ...

  10. sql server 不可见字符处理 总结

    前言 问题描述:在表列里有肉眼不可见字符,导致一些更新或插入失败. 几年前第一次碰见这种问题是在读取考勤机人员信息时碰见的,折腾了一点时间,现在又碰到了还有点新发现就顺便一起记录下. 如下图所示 go ...