IDictionary接口是所有字典类集合的基本接口,该接口与ICollection,IEnumerable接口是所有非泛型类集合的最基本的接口

IEnumerable接口用于公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。实现了该接口的集合可以用foreach语句迭代其中的元素

ICollection接口定义所有非泛型集合的大小、枚举数和同步方法。

IDictionary接口表示键/值对的非通用集合,是所有字典类集合的基接口

数组(using System)

数组:

数组是固定大小的,不能伸缩,要声明元素的类型。

数组可读可写不能声明只读数组;数组要有整数下标才能访问特定的元素

int[] arry = new int[9];

msdn解释:http://msdn.microsoft.com/zh-cn/library/system.array.aspx

ArrayList(using System.Collections)

1、通过添加和删除元素就可以动态改变数组的长度。但跟一般的数组比起来,速度慢些。

2、ArrayList中的所有元素都是对象的引用(如:ArrayList中的Add()方法定义为public virtual int Add(object value);)

3、ArrayList的索引会自动分配和调整

实例用法:

ArrayList  aList = new ArrayList();

aList.Add("add1"); //将对象添加到尾处:添加后的结果;aList[0] = "add1"

aList.Add("add2");//添加后的结果:aList[0] = "add1",aList[1] ="add2"

aList.Insert(0,"insert1"); //将元素插入指定索引处(插入后的结果:aList[0] ="insert1",aList[1]="add1",aList[2]="add2")

ArrayList aList2 = new ArrayList();

aList2.Add("add3");

aList2.Add("add4");

aList.InsertRange(1,aList2); //插入后结果aList[0]="insert1",aList[1]="add3",aList[2]="add4",aList[3]="add1",aList[4]="add2"

aList.Remove("add3");//移除特定对象的第一个匹配项。移除结果:aList[0]="insert1",aList[1]="add4",aList[2]="add1",aList[3]="add2"

aList.RemoveAt(0); //移除指定索引处的元素。移除结果:aList[0]="add4",aList[1]="add1",aList[2]="add2"

aList.Add("add5");

aList.RemoveRange(1,2);//移除一定范围的元素。1:表示索引;2:表示从索引处开始的数目。移除后结果:aList[0]="add4",aList[1]="add5"

aList.Clear();//移除aList中的所有元素

参考博客:http://www.cnblogs.com/skylaugh/archive/2006/09/15/505346.html

List(using System.Collections.Generic)

List<T> 与 ArrayList的区别
异同点 List<T>

ArrayList

 不同点   对所保存元素做类型约束  可以增加任何类型
 添加/读取无须拆箱、装箱  添加/读取取药拆箱、装箱
 相同点    通过索引访问集合中的元素 
 添加元素方法相同 
 删除元素方法相同 

List类在大多数情况子下执行得更好并且是类型安全的。

Hashtable(using System.collections)

哈希表(Key-Value):HashTable中的key/value均为object类型,所以HashTable可以支持任何类型的key/value键/值对。其中key必须是唯一的,没有有效的排序。

每个元素是一个存储在DictionaryEntry对象中的键/值dui。key不能为空引用,value可以

类似于字典但比数组更强大。

提供快速查询;元素的存储于顺序无关;因为元素本身没有有效的排序所以不能在指定的位置插入元素。

应用场景:某些数据高频率的查询;大数据量;查询的字段数据类型不是整型、浮点型而是字符串类型

实例用法:

Hashtable ht = new Hashtable

ht.Add("key1","value1");

ht.Add("key1","value2");

ht.Contsins("key1");//判断key1键是否存在

ht.Contsinkey("key1")//同上

foreach(Object key in ht.Keys) //遍历key

{}

foreach(Object value in ht.Values)//遍历value

{}

foreach(DicrionaryEntry de in ht) //同时遍历键/值对

{

Console.WriteLine(de.Key);

Console.WriteLine(de.Value);

}

ht.Remove("key1");//移除key1键元素

ht.Clear();//清除所有元素

Dictionary(using System.Collections.Generic)

实例应用:

Dictionary<String,String> dy = new Dictionary<String,String>();

dy.Add("key1","value1");//添加

dy["key2"] = "value2";//如果键不存在也可以通过此方法来添加键/值对

dy.ContainsKey("key1"); //判断该键是否存在

dy.Clear();//清除所有

Dictionary<K,V> 和哈希表的对比
异同点 Dictionary<K,V> HashTable
不同点 对所保存元素做类型约束 可以增加任何类型
添加/读取无须拆箱、装箱 添加/读取需要拆箱、装箱
相同点 通过key获取value
添加元素方法相同
删除元素方法相同
遍历方法相同

对于值类型,特定类型(不包括Object)的Dictionary的性能优于Hashtable。

Stack(using System.Collections)

栈:后进先出。push()入栈,pop()出栈。

Queue(using System.Collections)

队列:先进先出。enqueue()入队列,dequeue方法出队列

Dictionary<K,V>的非泛型对应的是Hashtable;
哈希表是一种查找数据非常快的数据结构,这也是Dictionary查找数据非常快的原因。
 
ASP.NET 程序员天天要打交道的 Application、Cache、Session、Request.Params等均由 Dictionary /Hashtable 实现。
数据库中的索引也是相似的原理。
自己动手写Dictionary<char, char> 。Dictionary性能测试(做火星文翻译200次)。为什么速度这么快?
查字典为什么能这么快?目录中记录了每个汉字的页码,查找的时候先看汉字的页码,再翻到指定的页就可以非常快速的找到词条了
Dictionary中有一个存储键值对的区域,采用一个固定算法(散列算法,非常快,可以认为时间复杂度为O(1) )根据key来计算这个kvp存放的地址,计算key的值的键值对应该存储的地址,将键值对放入指定的地址即可。查找的时候首先计算key的地址,就可以找到数据了。根据key找房间号,而不是逐个房间找。(*)
 
List<T>对应的非泛型结构是ArrayList

C#中Dictionary、ArrayList、Hashtable和Array的区别的更多相关文章

  1. java中的System.copyof()与Array.copyof()区别

    java中的System.copyof()与Array.copyof()区别 在复制数组时我们可以使用System.copyof(),也可以使用Array.copyof(),但是它们之间是有区别的.以 ...

  2. C#中Dictionary,Hashtable,List的比较及分析

    一. Dictionary与Hashtable Dictionary与Hashtable都是.Net Framework中的字典类,能够根据键快速查找值 二者的特性大体上是相同的,有时可以把Dicti ...

  3. 关于 C# 中 Dictionary与Hashtable的性能测试

    https://www.cnblogs.com/qianxingdewoniu/p/5266243.html

  4. java中hashmap和hashtable和hashset的区别

    hastTable和hashMap的区别:(1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现.(2)这个不同即是最重要的一点:Ha ...

  5. java中HashMap、HashTable、TreeMap的区别总结【表格对比清楚明了】

      底层 有序否 键值对能否为Null 遍历 线程安全 哈希Code Hashmap 数组+链表 无序 都可null iterator 不安全 内部hash方法 Hashtable 数组+链表 无序 ...

  6. 探求C#.Net中ArrayList与Array的区别 【转】

    ArrayList与Array的区别概述     ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能.例如 ...

  7. 探求C#.Net中ArrayList与Array的区别

     ArrayList与Array的区别概述     ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能.例 ...

  8. C#中集合ArrayList与Hashtable的使用

    C#中集合ArrayList与Hashtable的使用 http://blog.csdn.net/linukey/article/details/42506819 ArrayList: 一. 注意事项 ...

  9. repeater绑定数组、哈希表、字典 ArrayList/HashTable,Dictionary为datasource

    原文发布时间为:2009-11-19 -- 来源于本人的百度文章 [由搬家工具导入] repeater绑定数组、哈希表、字典datasource为ArrayList/HashTable,Diction ...

随机推荐

  1. 截断WM_SYSCOMMAND的SC_CLOSE命令(VC与Delphi双版本)

    WM_SYSCOMMAND - 系统命令消息,当点击最大化按钮,最小化按钮,关闭按钮等.都会收到这个消息.常用于窗口关闭时提示用户处理.WPARAM - 具体的命令,例如 关闭 SC_CLOSELPA ...

  2. 利用no_merge优化

    SQL> select a.unit3_code 机构编码, 2 a.unit3_name 机构名称, 3 a.dept1_code 部门编码, 4 a.dept1_name 部门名称, 5 a ...

  3. iso学习网站记录

    [零基础学习iOS开发] http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 非零基础学习iOS开发2-Objective-C h ...

  4. Android TextView setText内嵌html标签

    由于得到的数据是保存在数据库里面的,不好对数据的某一部分进行操作.解决办法在数据库里面存数据的时候加上html的标签对, 如data = <中华人名共和国道路交通安全实施条例>第<u ...

  5. 数据结构(树状数组):HEOI2012 采花

    [题目描述] 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便 ...

  6. HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)

    Auxiliary Set Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  7. ResponseHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using Cemetery_ ...

  8. 【狼】unity3d iTween插件的学习

    之前在一个三消游戏项目中接触到iTween,最近又要用到,发现iTween真的是一个很好用,省事的插件,有很多函数里包括 Hashtable的他都用一个函数很简单的完成了, 举几个例子 void Lo ...

  9. 《JavaScript核心概念》基础部分重点摘录

    注:<JavaScript核心概念>适合深入了解JavaScript,比我买的<JavaScript框架设计>语言和内容丰富多了(可能是我水平尚浅吧). 1. 作用域 var ...

  10. 简单粗暴地理解 JavaScript 原型链

    尼玛!你特么也是够了! Don’t BB! Show me the code! function Person (name) { this.name = name; } function Mother ...