C#中Dictionary、ArrayList、Hashtable和Array的区别
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类在大多数情况子下执行得更好并且是类型安全的。
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> | HashTable |
| 不同点 | 对所保存元素做类型约束 | 可以增加任何类型 |
| 添加/读取无须拆箱、装箱 | 添加/读取需要拆箱、装箱 | |
| 相同点 | 通过key获取value | |
| 添加元素方法相同 | ||
| 删除元素方法相同 | ||
| 遍历方法相同 | ||
对于值类型,特定类型(不包括Object)的Dictionary的性能优于Hashtable。
Stack(using System.Collections)
栈:后进先出。push()入栈,pop()出栈。
Queue(using System.Collections)
队列:先进先出。enqueue()入队列,dequeue方法出队列
数据库中的索引也是相似的原理。
查字典为什么能这么快?目录中记录了每个汉字的页码,查找的时候先看汉字的页码,再翻到指定的页就可以非常快速的找到词条了
Dictionary中有一个存储键值对的区域,采用一个固定算法(散列算法,非常快,可以认为时间复杂度为O(1) )根据key来计算这个kvp存放的地址,计算key的值的键值对应该存储的地址,将键值对放入指定的地址即可。查找的时候首先计算key的地址,就可以找到数据了。根据key找房间号,而不是逐个房间找。(*)
C#中Dictionary、ArrayList、Hashtable和Array的区别的更多相关文章
- java中的System.copyof()与Array.copyof()区别
java中的System.copyof()与Array.copyof()区别 在复制数组时我们可以使用System.copyof(),也可以使用Array.copyof(),但是它们之间是有区别的.以 ...
- C#中Dictionary,Hashtable,List的比较及分析
一. Dictionary与Hashtable Dictionary与Hashtable都是.Net Framework中的字典类,能够根据键快速查找值 二者的特性大体上是相同的,有时可以把Dicti ...
- 关于 C# 中 Dictionary与Hashtable的性能测试
https://www.cnblogs.com/qianxingdewoniu/p/5266243.html
- java中hashmap和hashtable和hashset的区别
hastTable和hashMap的区别:(1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现.(2)这个不同即是最重要的一点:Ha ...
- java中HashMap、HashTable、TreeMap的区别总结【表格对比清楚明了】
底层 有序否 键值对能否为Null 遍历 线程安全 哈希Code Hashmap 数组+链表 无序 都可null iterator 不安全 内部hash方法 Hashtable 数组+链表 无序 ...
- 探求C#.Net中ArrayList与Array的区别 【转】
ArrayList与Array的区别概述 ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能.例如 ...
- 探求C#.Net中ArrayList与Array的区别
ArrayList与Array的区别概述 ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能.例 ...
- C#中集合ArrayList与Hashtable的使用
C#中集合ArrayList与Hashtable的使用 http://blog.csdn.net/linukey/article/details/42506819 ArrayList: 一. 注意事项 ...
- repeater绑定数组、哈希表、字典 ArrayList/HashTable,Dictionary为datasource
原文发布时间为:2009-11-19 -- 来源于本人的百度文章 [由搬家工具导入] repeater绑定数组、哈希表、字典datasource为ArrayList/HashTable,Diction ...
随机推荐
- poj3373
其实这道题只告诉了一个事当出现多个满足答案约束条件是,我们可以求一个再求一个,不要一下子全求完前两个条件怎么弄之前已经做过类似的了于是我们可以用记忆化搜索找出最小差异然后配合最小差异来剪枝,搜索出最小 ...
- poj2482
(题外话:这题这是ACMer的福利啊……)我非常不擅长做矩形类的数据结构一般来说,二维的问题我们要转化为一维来考虑感觉一般的手法是对一维排序,并且线性扫描这一维,然后用各种数据结构维护另一维上的最优值 ...
- git 添加忽略文件
使用github for windows客户端添加.gitignore文件: 如下图所示,在github客户端可以看到未提交的更改列表 随便选中一个文件,右链,选择ignore file. 然后会 ...
- .net开源工作流引擎ccflow
关于济南驰骋信息技术有限公司的.net开源工作流引擎 驰骋工作流引擎,工作流程管理系统:简称ccflow,驰骋一体化解决方案简称ccport. ccflow是济南驰骋信息技术有限公司向社会提供的一款1 ...
- duang体加班版
领导第一次让我加班的时候,其实我是拒绝的,因为我觉着加班这个事,不能你让我加我就加,晚了就没有地铁了..领导跟我说可以打车报销.加了一个月之后,我的钱包duang~,后来我知道报销其实是假的,我每天打 ...
- HDU 1502 Regular Words DP+高精度
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1502 题目大意:找出总的满足条件的字符串数,num(a)=num(b)=num(c)且任何前缀均满足n ...
- hdoj 2141 Can you find it?【二分查找+暴力】
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others ...
- 没有找到 mspdb100.dll 的解决办法
直接从Common7\IDE\下复制这个文件到VC\Bin\下即可解决.(D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE)
- 初学scala2——case class
case class,样例类,有人也叫条件类. 例如: case class Person(name:String, age:Int) 好用之处: 1.新建类实例不用new Person(..),直接 ...
- The app references non-public selectors in Payload
上周上传app到appstore在validation完后有警告提示"The app references non-public selectors in Payload/wacao.app ...