我在信牛管家审请了融360贷款可靠吗资料又害怕被骗请问怎样删除

C# 集合类 :(Array、 Arraylist、List、Hashtable、Dict...
我的图书馆
C# 集合类 :(Array、 Arraylist、List、Hashtable、Dict...
我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类。我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,14:31:45,例如我们需要在电子商务网站中存储用户的购物车信息(商品名,对应的商品个数)时,完全可以用 Dictionary&string, int& 来存储购物车信息,而不需要任何的类型转化。
1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,&
但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的&
2.数组要声明元素的类型,集合类的元素类型却是object.&
3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。&
4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。&
很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!&
1.&&&&&& 数组&
int[] intArray1;&
//初始化已声明的一维数组&
intArray1 = new int[3];&
intArray1 = new int[3]{1,2,3};&
intArray1 = new int[]{1,2,3};&
2. ArrayList类对象被设计成为一个动态数组类型,其容量会随着需要而适当的扩充&
1:Add()向数组中添加一个元素,&
2:Remove()删除数组中的一个元素&
3:RemoveAt(int i)删除数组中索引值为i的元素&
4:Reverse()反转数组的元素&
5:Sort()以从小到大的顺序排列数组的元素&
6:Clone()复制一个数组&
&using System.Collections.G
&using System.T
&using System.C
&namespace ConsoleApplication1
&&&&&class Program
&&&&&&&&&static void Main(string[] args)
&&&&&&&&&&{
&&&&&&&&&&&&&ArrayList al = new ArrayList();
&&&&&&&&&&&&&al.Add(100);
&&&&&&&&&&&&&&foreach (int number in new int[6] { 9, 3, 7, 2, 4, 8 })
&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&al.Add(number);
&&&&&&&&&&&&&}
&&&&&&&&&&&&&&int[] number2 = new int[2] { 11,12 };
&&&&&&&&&&&&&al.AddRange(number2);
&&&&&&&&&&&&&al.Remove(3);
&&&&&&&&&&&&&al.RemoveAt(3);
&&&&&&&&&&&&&ArrayList al2 = new ArrayList(al.GetRange(1, 3));
&&&&&&&&&&&&&Console.WriteLine("遍历方法一:");
&&&&&&&&&&&&&foreach (int i in al)
&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&Console.WriteLine(i);
&&&&&&&&&&&&&}
&&&&&&&&&&&&&Console.WriteLine("遍历方法二:");
&&&&&&&&&&&&&for (int i = 0; i != al2.C i++)
&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&int number = (int)al2[i];
&&&&&&&&&&&&&&&&&Console.WriteLine(number);
&&&&&&&&&&&&&}
&&&&&&&&&}
3.&&&&&& List&
可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法,在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。&
如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。&
List&string& names = new List&string&();&
names.Add("乔峰");&
names.Add("欧阳峰");&
names.Add("马蜂");&
foreach (string name in names)&
Console.WriteLine(name);&
names.Insert(2, "张三峰");&
names.Remove("马蜂");
4.&&&&&& Dictionary&
表示键和值的集合。Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同&
Dictionary&string, string& myDic = new Dictionary&string, string&();
&&&&&myDic.Add("aaa", "111");
&&&&&myDic.Add("bbb", "222");
&&&&&myDic.Add("ccc", "333");
&&&&&myDic.Add("ddd", "444");
&&&&&&&&&myDic.Add("ddd","ddd");
&&&&&catch (ArgumentException ex)
&&&&&&&&&Console.WriteLine("此键已经存在:" + ex.Message);
&&&&&if (!myDic.ContainsKey("ddd"))
&&&&&&&&&myDic.Add("ddd", "ddd");
&&&&&&&&&Console.WriteLine("此键已经存在:");
&&&&&myDic ["ddd"]="ddd";
&&&&&myDic["eee"] = "555";
&&&&&&&&&Console.WriteLine("不存在的键""fff""的键值为:" + myDic["fff"]);
&&&&&catch (KeyNotFoundException ex)
&&&&&&&&&Console.WriteLine("没有找到键引发异常:" + ex.Message);
&&&& //解决上面的异常的方法是使用ContarnsKey() 来判断时候存在键,如果经常要取健值得化最好用 TryGetValue方法来获取集合中的对应键值
string value = "";
&&&&&if (myDic.TryGetValue("fff", out value))
&&&&&&&&&Console.WriteLine("不存在的键""fff""的键值为:" + value );
&&&&&&&{&&&&&
&&&&&&&&&Console.WriteLine("没有找到对应键的键值");&
&&&&&foreach (KeyValuePair&string, string& kvp in myDic)
&&&&&&&&&Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value);
&&&&&foreach (string s in myDic.Values)
&&&&&&&&&Console.WriteLine("value={0}", s);
&&&&&Dictionary&string, string&.ValueCollection values = myDic.V
&&&&&foreach (string s in values)
&&&&&&&&&Console.WriteLine("value={0}", s);
常用的属性和方法如下&&&&
获取用于确定字典中的键是否相等的 IEqualityComparer。&
获取包含在 Dictionary中的键/值对的数目。&
获取或设置与指定的键相关联的值。
获取包含 Dictionary中的键的集合。&
获取包含 Dictionary中的值的集合。&
常用的方法
将指定的键和值添加到字典中。&
从 Dictionary中移除所有的键和值。&
& ContainsKey&
确定 Dictionary是否包含指定的键。&
ContainsValue&
确定 Dictionary是否包含特定值。&
已重载。 确定两个 Object实例是否相等。 (从 Object继承。)&
GetEnumerator&
返回循环访问 Dictionary的枚举数。&
GetHashCode&&
用作特定类型的哈希函数。GetHashCode适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object继承。)&
GetObjectData&
实现 System.Runtime.Serialization.ISerializable接口,并返回序列化 Dictionary实例所需的数据。&
获取当前实例的 Type。 (从 Object继承。)&
OnDeserialization&
实现 System.Runtime.Serialization.ISerializable接口,并在完成反序列化之后引发反序列化事件。&
ReferenceEquals&&
确定指定的 Object实例是否是相同的实例。 (从 Object继承。)&
从 Dictionary中移除所指定的键的值。&
ToString&&
返回表示当前 Object的 String。 (从 Object继承。)&
TryGetValue&
获取与指定的键相关联的值。&
5.&&&&&& SortedList类&
与哈希表类似,区别在于SortedList中的Key数组排好序的&
System.Collections.SortedList list=new System.Collections.SortedList();&
list.Add("key2",2);&
list.Add("key1",1);&
for(int i=0;i&list.Ci++)&
System.Console.WriteLine(list.GetKey(i));&
6.Hashtable类&
哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。&
GetHashCode()方法返回一个int型数据,使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。&
Hashtable 和 Dictionary &K, V& 类型&
1:单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
2:多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
3:Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.
HashTable中的key/value均为object类型,由包含集合元素的存储桶组成。存储桶是 HashTable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。每一存储桶都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。HashTable的优点就在于其索引的方式,速度非常快。如果以任意类型键值访问其中元素会快于其他集合,特别是当数据量特别大的时候,效率差别尤其大。
HashTable的应用场合有:做对象缓存,树递归算法的替代,和各种需提升效率的场合。
&&System.Collections.Hashtable ht = new System.Collections.Hashtable();&
&&ht.Add(1, "apple");
&&ht.Add(2, "banana");
&&ht.Add(3, "orange");&&&&&
&&if(ht.ContainsKey(1))
&&&&&&ht[1] = "appleBad";&
&&object oValue = ht[5];&&&&&&
&&foreach (DictionaryEntry de in ht)
&&&&&&Console.WriteLine(de.Key);
&&&&&&Console.WriteLine(de.Value);
&&System.Collections.IDictionaryEnumerator d = ht.GetEnumerator();
&&while (d.MoveNext())
&&&&&&Console.WriteLine("key:{0} value:{1}", d.Entry.Key, d.Entry.Value);
&&ht.Clear();
Dictionary和HashTable内部实现差不多,但前者无需装箱拆箱操作,效率略高一点。
&&&System.Collections.Generic.Dictionary&int, string& fruits =&&&&&&&&& new System.Collections.Generic.Dictionary&int, string&();&
&&&fruits.Add(1, "apple");
&&&fruits.Add(2, "banana");
&&&fruits.Add(3, "orange");&
&&&foreach (int i in fruits.Keys)
&&&&&&&Console.WriteLine("key:{0} value:{1}", i, fruits);&&&& }
&&&if (fruits.ContainsKey(1))
&&&&&&&Console.WriteLine("contain this key.");
HashTable是经过优化的,访问下标的对象先散列过,所以内部是无序散列的,保证了高效率,也就是说,其输出不是按照开始加入的顺序,而Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同。如果一定要排序HashTable输出,只能自己实现:
&&&&System.Collections.ArrayList akeys = new System.Collections.ArrayList(ht.Keys);
&&&&akeys.Sort();
&&&&foreach (string skey in akeys)
&&&&&&&&Console.Write(skey + ":");
&&&&&&&&Console.WriteLine(ht[skey]);
HashTable与线程安全:
为了保证在多线程的情况下的线程同步访问安全,微软提供了自动线程同步的HashTable:&
如果 HashTable要允许并发读但只能一个线程写, 要这么创建 HashTable实例:
&&& //Thread safe HashTable
&&& System.Collections.Hashtable htSyn = System.Collections.Hashtable.Synchronized(new System.Collections.Hashtable());
这样, 如果有多个线程并发的企图写HashTable里面的 item, 则同一时刻只能有一个线程写, 其余阻塞; 对读的线程则不受影响。
另外一种方法就是使用lock语句,但要lock的不是HashTable,而是其SyncRoot;虽然不推荐这种方法,但效果一样的,因为源代码就是这样实现的:
private static System.Collections.Hashtable htCache = new System.Collections.Hashtable ();
public static void AccessCache ()
&&&&lock ( htCache.SyncRoot )
&&&&&&&&htCache.Add ( "key", "value" );
public static void AccessCache ()
&&&&System.Threading.Monitor.Enter ( htCache.SyncRoot );
&&&&&&&&htCache.Add ( "key", "value" );
&&&&finally
&&&&&&&&System.Threading.Monitor.Exit ( htCache.SyncRoot );
7. Stack类&
栈,后进先出。push方法入栈,pop方法出栈。
System.Collections.Stack stack=new System.Collections.Stack();&
stack.Push(1);&
stack.Push(2);&
System.Console.WriteLine(stack.Peek());&
while(stack.Count&0)&
System.Console.WriteLine(stack.Pop());&
8.Queue类&
队列,先进先出。enqueue方法入队列,dequeue方法出队列。&
System.Collections.Queue queue=new System.Collections.Queue();&
queue.Enqueue(1);&
queue.Enqueue(2);&
System.Console.WriteLine(queue.Peek());&
while(queue.Count&0)&
System.Console.WriteLine(queue.Dequeue());&
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/snlei/archive//3939206.aspx
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue
1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,
&&&&& 但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合
1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,
但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的
  2.数组要声明元素的类型,集合类的元素类型却是object.
  3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。
  4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。
很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!
int[] intArray1;
//初始化已声明的一维数组
intArray1 = new int[3];
intArray1 = new int[3]{1,2,3};
intArray1 = new int[]{1,2,3};
//ArrayList类对象被设计成为一个动态数组类型,其容量会随着需要而适当的扩充
1:Add()向数组中添加一个元素,
2:Remove()删除数组中的一个元素
3:RemoveAt(int i)删除数组中索引值为i的元素
4:Reverse()反转数组的元素
5:Sort()以从小到大的顺序排列数组的元素
6:Clone()复制一个数组
可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法
在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。如果对 List 类的类型 T 使用引用类型,则
两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。
如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表
元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。
//Dictionary
表示键和值的集合。Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同
//SortedList类
与哈希表类似,区别在于SortedList中的Key数组排好序的
//Hashtable类
  哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。
GetHashCode()方法返回一个int型数据,使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。
栈,后进先出。push方法入栈,pop方法出栈。
  队列,先进先出。enqueue方法入队列,dequeue方法出队列。
-------------------------------------------------------------
//Dictionary
System.Collections.DictionaryEntry dic=new System.Collections.DictionaryEntry("key1","value1");
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)
Console.WriteLine("键是:{0} 值是:{1}",i,fruit);
//删除指定键,值
fruit.Remove(1);
//判断是否包含指定键
if (fruit.ContainsKey(1))
Console.WriteLine("包含此键");
//清除集合中所有对象
fruit.Clear();
//ArrayList
System.Collections.ArrayList list=new System.Collections.ArrayList();
list.Add(1);
list.Add(2);
for(int i=0;i&list.Ci++)
System.Console.WriteLine(list[i]);
//声明一个List对象,只加入string参数
List&string& names = new List&string&();
names.Add("乔峰");
names.Add("欧阳峰");
names.Add("马蜂");
//遍历List
foreach (string name in names)
Console.WriteLine(name);
//向List中插入元素
names.Insert(2, "张三峰");
//移除指定元素
names.Remove("马蜂");
//HashTable
System.Collections.Hashtable table=new System.Collections.Hashtable();
table.Add("table1",1);
table.Add("table2",2);
System.Collections.IDictionaryEnumerator d=table.GetEnumerator();
while(d.MoveNext())
System.Console.WriteLine(d.Entry.Key);
System.Collections.Queue queue=new System.Collections.Queue();
queue.Enqueue(1);
queue.Enqueue(2);
System.Console.WriteLine(queue.Peek());
while(queue.Count&0)
System.Console.WriteLine(queue.Dequeue());
//SortedList
System.Collections.SortedList list=new System.Collections.SortedList();
list.Add("key2",2);
list.Add("key1",1);
for(int i=0;i&list.Ci++)
System.Console.WriteLine(list.GetKey(i));
System.Collections.Stack stack=new System.Collections.Stack();
stack.Push(1);
stack.Push(2);
System.Console.WriteLine(stack.Peek());
while(stack.Count&0)
System.Console.WriteLine(stack.Pop());博客频道 - CSDN.NET
如果你接触过 跨进程通信 (IPC),那么你对Binder一定不陌生
虽然 网上有很多介绍 Binder的文章,可是存在一些问题:浅显的讨论Binder机制 或 一味讲解 Binder源码、逻辑...
19分钟前75
如果一个开发者一直处在“没什么问题何必改进与提升”的状态,被动完成任务,很少考虑更新自己的技术栈、工程能力、思维框架与认知深度,那很可能一朝梦醒(被辞或被裁),就会发现时代的洪流已然呼啸而过,只有自己...
昨天 21:441530
先写一段多线程程序。
加上 -g参数生成可调式信息, 可以进行调试。
pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,...
昨天 20:55583
本文主要包括以下内容:
1)模型训练数据生成(demo)
2 ) 模型训练(spark+java),数据存储在hdfs上
3)预测数据生成(demo)
4)使用生成的模型进行文本分类。
昨天 20:25596
今天来记录一下关于ajax跨域的一些问题。以备不时之需。跨域同源策略限制同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性。也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相...
昨天 20:22824
此篇博客所有源码均来自JDK 1.8
HashMap是我们用得非常频繁的一个集合,但是由于它是非线程安全的,在多线程环境下,put操作是有可能产生死循环的,导致CPU利用率接近100%。为了解决该问题...
昨天 20:21631
每周荐书:架构、Scratch、增长黑客(评论送书)
感谢大家对每周荐书栏目的支持,先公布下上周中奖名单
《白帽子讲Web扫描》
伪随机的张三
《疯狂HTM...
昨天 17:151079
简单讲解一下http请求以及GET POST的区别
https的加密方式和几次握手
https的加密方式
加密的详细过程
在不知道二进制文件格式的情况下如何区分文件
常见的几种线程锁
怎么保证线程安全...
昨天 14:33890
今天Perfect正式公开了第一个TensorFlow Swift服务器的源代码,详细内容可以在本页链接下载:Perfect TensorFlow 机器视觉演示程序/Perfect...
昨天 10:392227
内存泄漏向来都是内存优化的重点,它如同幽灵一般存于我们的应用当中,有时它不会现身,但一旦现身就会让你头疼不已。因此,如何避免、发现和解决内存泄漏就变得尤为重要。这一篇我们先来学习如何避免内存泄漏。
昨天 10:39789
一、canvas简介 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时...
昨天 10:27843
类概况Tomcat的server.xml中,Host节点的子元素名称是Valve,用来定义一系列的处理器,AccessLogValve就是用来记录容器访问请求的日志处理类。Valve,本意是阀门的意思...
昨天 09:47558
昨天 08:15806
一、搭建开发环境
在你的电脑上安装  eclipse  hbuilder   jdk  tomcat   ,这些步骤不再细说
二、打开Hbuilder
三、新建Demo项目
最后点击完成。
昨天 08:12628
最近出现了好几次同样的对话场景:
问:你是做什么的?
答:最近在搞数据仓库。
问:哦,你是传统行业的吧,我是搞大数据的。
发个牢骚,搞大数据的也得...
昨天 18:26979
openstack RPC通信Openstack 的主要组件有 Nova、Cinder、Neutron、Glance 等,分别负责云平台的计算、存储、网络资源管理。OpenStack 各组件之间是通过...
昨天 17:07698
最近,Stack Overflow 发布了一篇 2017 开发者调查报告,此次在全球有超过 64,000 名开发者参与调查,分别对其技能、工具、学习趋势等数据进行了统计,比较遗憾的是中国参与调查的开发...
昨天 17:061415
深入焦点处理流程
dispatchKeyEvent
focusSearch
requestFocus
昨天 17:00652
背景Bootstrap启动的时候使用了两个系统变量catalina.home和catalina.base,从官网和源码中的注释可以知道这两者的区别主要是:catalina.home是Tomcat产品的...
昨天 16:30720
时不时有读者留言聊起关于选择工作和谈薪水的事情,近些年都在同一家公司,本来都已经有些忘了找工作的感觉,这一聊起又回想起了早年的求职经历,当时我应也是有过困惑与困境吧?
昨天 16:224799
加载更多...
Programmer
《Hadoop构建数据仓库实践》作者
物联网与大数据将助推工业应用的崛起,你认同么?
专家公开课
讲师:韦玮
专家图书推荐
目前在聚美担任 android 架构师,主攻 android 软件架构设计与程序优化。技术...
自学java,Android。两年工作经验,主要做Android系统开发,蓝牙模块比较多。
目前就职于阿里巴巴大文娱板块,热爱前端知识分享
推荐知识库
热文排行榜
联系客服:
CSDN博客QQ群号:C#中Dictionary、ArrayList、Hashtable和Array的区别
C#中Dictionary、ArrayList、Hashtable和Array的区别
发布时间: 11:02:32
编辑:www.fx114.net
本篇文章主要介绍了"C#中Dictionary、ArrayList、Hashtable和Array的区别",主要涉及到C#中Dictionary、ArrayList、Hashtable和Array的区别方面的内容,对于C#中Dictionary、ArrayList、Hashtable和Array的区别感兴趣的同学可以参考一下。
IDictionary接口是所有字典类集合的基本接口,该接口与ICollection,IEnumerable接口是所有非泛型类集合的最基本的接口
IEnumerable接口用于公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。实现了该接口的集合可以用foreach语句迭代其中的元素
ICollection接口定义所有非泛型集合的大小、枚举数和同步方法。
IDictionary接口表示键/值对的非通用集合,是所有字典类集合的基接口
数组(using System)
数组是固定大小的,不能伸缩,要声明元素的类型。
数组可读可写不能声明只读数组;数组要有整数下标才能访问特定的元素
int[] arry = new int[9];
msdn解释:/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中的所有元素
参考博客:/skylaugh/archive//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& 和哈希表的对比
Dictionary&K,V&
对所保存元素做类型约束
可以增加任何类型
添加/读取无须拆箱、装箱
添加/读取需要拆箱、装箱
通过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
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:

我要回帖

更多关于 好借又不面审的贷款 的文章

 

随机推荐