Stack类

ns:System.Collections

此类模仿了一个简单的先进后出(LIFO)的集合 它实现了ICollection接口

可以通过三种方式创建Stack类对象

 Stack stack = new Stack();//初始化Stack  默认初始长度为10
 stack.Push("sam");

 Stack stack = );//初始化Stack  指定长度为20
 stack.Push("sam");

 ArrayList list = new ArrayList();
 list.Add("sam");
 list.Add("leo");
 Stack stack = new Stack(list);//将一个实现了ICollection接口的类型实例作为参数初始化Stack 

Stack类的属性

Count属性

获取元素总数

SyncRoot属性

获取一个对Stack对象同步访问的对象 因为Stack对象默认不是线程安全的对象 所以如果同步操作 则同步操作应该在Stack的SyncRoot上执行

IsSynchronized属性

获取一个值 该值表示是否是同步对Stack对象的访问 默认false

Stack类的方法

Synchronized静态方法

在参数指定的Stack对象中放置一个同步(线程安全)的包装器 并返回包装版本

Peek方法

获取集合中处于最深处的元素

 ArrayList list = new ArrayList();
 list.Add("sam");
 list.Add("leo");
 Stack stack = new Stack(list);
 Console.WriteLine(stack.Peek());//return leo

Pop方法

删除集合中处于最深处的元素 并返回删除的元素

 ArrayList list = new ArrayList();
 list.Add("sam");
 list.Add("leo");
 Stack stack = new Stack(list);
 Console.WriteLine(stack.Pop());//return leo
 Console.WriteLine(stack.Pop());//return sam

Push方法

将参数指定的元素压入集合

 Stack stack = new Stack(list);
 stack.Push("korn");
 Console.WriteLine(stack.Peek());//return korn

ToArray方法

将集合中的元素拷贝到数组中 并返回数组

Clear、Clone、Contains、CopyTo、GetEnumerator方法 略……

Stack是一个先进后出的集合 测试如下

 Stack queue = new Stack();
 queue.Push("sam");
 queue.Push("leo");
 queue.Push("korn");

 )
 {
     Console.WriteLine(queue.Pop());
 }

删除顺序为 korn leo sam

Queue类

ns:System.Collections

此类模仿了一个简单的先进先出(FIFO)的集合 它实现了ICollection接口 Queue对象有一个初始的容量来存储元素 如果存储的元素的容量达到了这个初始容量 那么它还会自动增长 可以在初始化Queue时 提供一个值来指示它容量的增长系数 默认值为2 即容量已满 容量自动倍增

可以通过四种方式创建Queue类对象

 Queue queue = new Queue();//初始化Queue 默认初始长度为10
 queue.Enqueue("sam");
 //……

 Stack queue = );//初始化Queue 指定长度为20
 queue.Enqueue("sam");
 //……

 Stack queue = ,3.0);//初始化Queue 指定长度为20 容量增长系数3.0
 queue.Enqueue("sam");
 //……

 ArrayList list = new ArrayList();
 list.Add("sam");
 list.Add("leo");
 Queue queue = new Queue(list);//将一个实现了ICollection接口的类型实例作为参数初始化Queue

Queue类的属性

Count属性

获取元素总数

SyncRoot属性

获取一个对Queue对象同步访问的对象 因为Queue对象默认不是线程安全的对象 所以如果同步操作 则同步操作应该在Queue的SyncRoot上执行

IsSynchronized属性

获取一个值 该值表示是否是同步对Queue对象的访问 默认false

Queue类的方法

Synchronized静态方法

在参数指定的Queue对象中放置一个同步(线程安全)的包装器 并返回包装版本

Peek方法

获取集合中处于最外处的元素

 Queue queue = new Queue();
 queue.Enqueue("sam");
 queue.Enqueue("leo");
 Console.WriteLine(queue.Peek());//return sam

Dequeue方法

删除集合中处于最外处的元素 并返回删除的元素

Enqueue方法

将参数指定的元素压入集合

ToArray方法

将集合中的元素拷贝到数组中 并返回数组

TrimToSize

将Queue的容量设置为它所包含的的元素总数 以节省容量 默认容量是10

Clear、Clone、Contains、CopyTo、GetEnumerator方法 略……

Queue是一个先进先出的集合 测试如下

 Queue queue = new Queue();
 queue.Enqueue("sam");
 queue.Enqueue("leo");
 queue.Enqueue("korn");
 queue.TrimToSize();
 )
 {
     Console.WriteLine(queue.Dequeue());
 }

删除顺序为 sam leo korn

ArrayList类

ns:System.Collections

此类可以看成是一个动态的数组 它实现了IList接口 可以随时添加项进去 它的容量可以自动增长 ArrayList是弱类型的 即它可以包含任何类型的元素 当你不知道要添加的元素的类型或希望能存储不同类型的元素时 可以考虑使用ArrayList 此类不是线程安全的 比如两个不同的线程可以在同一时刻向它添加元素 可以使用它的SyncRoot属性来保证线程安全

 ArrayList list = new ArrayList();
 lock (list.SyncRoot)
 {
     //……
 }

或者使用它的静态方法Synchronized来创建一个保证线程安全的包装器

 ArrayList list = new ArrayList();
 ArrayList syncList = ArrayList.Synchronized(list);
 lock (syncList)
 {
     //……
 }

*同步对象依然需要加锁 否则多个线程依然可以同时访问集合

ArrayList类的属性

this[index]索引器

获取指定下标处的元素

Count属性

获取元素总数

SyncRoot属性

获取一个对ArrayList对象同步访问的对象 因为ArrayList对象默认不是线程安全的对象 所以如果同步操作 则同步操作应该在ArrayList的SyncRoot上执行

IsSynchronized属性

获取一个值 该值表示是否是同步对ArrayList对象的访问 默认false

Capacity

设置或获取集合所能容纳的元素数

ArrayList类的静态方法 

Synchronized静态方法

创建一个保证线程安全的包装器 返回一个表示包装器的ArrayList对象

Adapter静态方法

为参数指定的IList对象添加一个ArrayList线程安全的包装器

 ArrayList list = new ArrayList();
 IList myList=ArrayList.Adapter(list);
 lock (myList)
 {
     myList.Add("sam");
 }

FixedSize静态方法

与Adapter方法类似 但IList容量大小是固定的 不能修改或删除IList的元素 如果修改或删除将抛出异常

ReadOnly静态方法

与Adapter方法类似 但IList是只读的 尝试修改删除将抛出异常

Repeat静态方法

将集合中的元素浅拷贝N次后存储到一个新的ArrayList对象中 并返回该对象 参数object表示集合中的元素 count表示准备拷贝几次

 ArrayList list = new ArrayList();
 list.Add("sam");
 ArrayList newAryList=ArrayList.Repeat();//将元素sam拷贝10次 存入新集合

ArrayList类的实例方法

Add方法

向集合中添加参数指定的元素 并返回该元素的下标

AddRange方法

将参数指定的实现了ICollection的集合的元素添加到当前集合中

Insert方法

插入一个新的元素到集合中 其下标由参数index指定

InsertRange方法

插入一个集合到当前集合中 其起始下标由参数index指定

Clear方法

清空集合的元素

Remove方法

从集合中删除参数指定的元素

RemoveAt方法

从集合中删除参数指定的下标处的元素

RemoveRange方法

从集合中删除多个元素 多个元素的范围由startIndex和count指定

BinarySearch方法

对当前集合对象的元素执行一次二进制查找 该方法具有多个重载 它的参数如下

value:元素对象

compare:一个实现了ICompare接口的对象 该对象用于自定义查找标准

startIndex:查找的起始下标

count:查找的个数 将以起始下标为起点到count指定的数值为查找终结点

IndexOf

查找集合中的参数指定的元素 可通过startIndex和length定义查找在集合中的某个子集进行 查到返回元素的下标 查不到返回-1

LastIndexOf

与IndexOf的区别仅在于 此方法反向查找

Contains方法

集合是否包含参数指定的元素

Clone方法

返回一个对当前集合的浅拷贝的集合对象 相当于产生了一个对原集合的引用

CopyTo方法

将集合的元素或一部分元素拷贝到参数指定的数组中 前提是数组元素必须和集合元素相兼容 此方法具有多个重载 它的参数如下

array:目标数组

arrayIndex:指定集合中被拷贝的元素在目标数组中的起始下标

sourceIndex:指定集合中被拷贝的元素的起始下标

count:指定集合中被拷贝的元素的个数

SetRange方法

将参数指定的集合拷贝到当前集合中 可以通过参数startIndex指定要从参数指定的集合的下标处开始拷贝

Sort方法

将集合中的元素排序 默认使用的排序规则是由集合的每个元素实现的IComparer 你可以通过comparer参数指定自己的排序规则 还可以通过startIndex和count指定集合的一个子集应用排序

GetEnumerator方法

获取一个可用于遍历集合的IEnumerator对象 可以指定startIndex和count来返回一个映射了集合的子集的IEnumerator对象 它将只遍历集合的一部分

Reverse方法

倒转集合 可以通过参数startIndex和count指定要倒转的集合的一个子集

ToArray方法

将集合元素拷贝到参数指定的数组中 可以通过参数type指定数组的类型 默认是object

TrimToSize方法

使集合的容量等于它所包含的的元素数量 如果该集合是只读的或大小固定的 使用此方法将会抛出异常

Hashtable类 

ns:System.Collections

此类是一个封装了键值对的集合 元素根据键的哈希码组织在一起 可以随时添加项进去 它的容量可以自动增长 Hashtable中的元素是无序列的 它们只能靠键来访问 正因为如此 Hashtable在性能上要优于SortedList .NET通过DictionaryEntry结构来表示Hashtable中的元素 所以可以使用该结构来遍历Hashtable 如

 Hashtable list = new Hashtable();
 list.Add(,"sam");
 list.Add(, "leo");
 list.Add(, "korn");
 foreach (DictionaryEntry entry in list)
 {
     Console.WriteLine("key{0},value{1}",entry.Key, entry.Value);
 }

Hashtable类的属性

this[Key]索引器

获取指定键的元素

Count属性

获取元素总数

SyncRoot属性

获取一个对Hashtable对象同步访问的对象 因为Hashtable对象默认不是线程安全的对象 所以如果同步操作 则同步操作应该在Hashtable的SyncRoot上执行

IsSynchronized属性

获取一个值 该值表示是否是同步对Hashtable对象的访问 默认false

Keys

获取集合的所有键

Values

获取集合的所有元素

Hashtable类的方法 

Synchronized静态方法

创建一个保证线程安全的包装器 返回一个表示包装器的Hashtable对象

Add方法

向集合中添加参数指定的Key和Value

Remove方法

从集合中删除参数指定的Key对应的元素

Clear方法

清空集合的元素

Contains方法

集合是否包含参数指定的Key所对应的元素

ContainsKey方法

作用于Contains相同

ContainsValue方法

集合是否包含参数指定的Value

Clone方法

返回一个对当前集合的浅拷贝的集合对象 相当于产生了一个对原集合的引用

CopyTo方法

此方法由实现了ICollection的对象来调用 比如Hashtable的Keys或者Values可以调用该方法 用于将Keys或者Values包含的Key或Value拷贝到数组中

 Hashtable list = new Hashtable();
 list.Add(, "sam");
 list.Add(, "leo");
 list.Keys.CopyTo(();
 list.Values.CopyTo(();

GetEnumerator方法

获取一个可用于遍历集合的IDictionaryEnumerator对象

SortedList类

ns:System.Collections

此类是一个封装了键值对的集合 元素根据键的哈希码组织在一起 可以随时添加项进去 它的容量可以自动增长 它与Hashtable不太一样 它所包含的元素会按照键进行排序 所以元素既可以通过Key来获取也可以通过下标来获取键一般都是int或者string类型的 键也可以是自定义的类型 我们说SortedList的元素会自动根据键排序 但如果键是一个非string的引用类型 则你可以传递一个IComparer对象实现自定义排序

SortedList类的属性

this[Key]索引器

获取指定键的元素

Count属性

获取元素总数

SyncRoot属性

获取一个对SortedList对象同步访问的对象 因为SortedList对象默认不是线程安全的对象 所以如果同步操作 则同步操作应该在SortedList的SyncRoot上执行

IsSynchronized属性

获取一个值 该值表示是否是同步对SortedList对象的访问 默认false

Capacity属性

设置或获取集合所能容纳的元素数

Keys属性

获取集合的所有键

Values属性

获取集合的所有元素

SortedList类的方法

Synchronized静态方法

创建一个保证线程安全的包装器 返回一个表示包装器的SortedList对象

Add方法

向集合中添加参数指定的Key和Value

Remove方法

从集合中删除指定的元素 参数可以是Key也可以是index 参数index表示要删除的元素的下标

Clear方法

清空集合的元素

SetByIndex方法

修改参数指定的下标处的元素

Clone方法

返回一个对当前集合的浅拷贝的集合对象 相当于产生了一个对原集合的引用

CopyTo方法

此方法由实现了ICollection的对象来调用 比如SortedList的Keys或者Values可以调用该方法 用于将Keys或者Values包含的Key或Value拷贝到数组中

 SortedList list = new SortedList();
 list.Add(, "sam");
 list.Add(, "leo");
 list.Keys.CopyTo(();
 list.Values.CopyTo(();

Contains方法

集合是否包含参数指定的Key所对应的元素

ContainsKey方法

作用于Contains相同

ContainsValue方法

集合是否包含参数指定的Value

GetEnumerator方法

获取一个可用于遍历集合的IDictionaryEnumerator对象

GetByIndex方法

获取参数指定的下标处的元素

GetKey方法

获取参数指定的下标处的Key

GetKeyList方法

获取集合的所有键

GetValueList方法

获取集合中所有元素

IndexOfKey方法

获取集合中由参数指定的Key所对应的元素的下标 找不到返回-1

IndexOfValue方法

获取集合中由参数指定的元素的下标 找不到返回-1

TrimToSize方法

使集合的容量等于它所包含的的元素数量  如果该集合是只读的或大小固定的 使用此方法将会抛出异常

泛型集合(强类型集合)

集合可以存储任意的对象 因为集合将这些对象统统当做了object来处理 如何规定集合只能存储某种特定的类型呢 此时可以考虑使用泛型集合 以下介绍两种泛型集合

List<T>泛型集合

一个动态的数组 它实现了IList接口 可以随时添加项进去 可以随时添加项进去 它的容量可以自动增长 类似于ArrayList 但两个类的区别在于ArrayList是弱类型的 即它可以包含任何类型的元素 而List<T>包含的元素类型被预定义为T类型 List<T>的属性与方法与ArrayList差不多是一样的 这里不再做罗列

Dictionary<K,V>泛型集合

此类是一个封装了键值对的集合 元素根据键的哈希码组织在一起 可以随时添加项进去 它的容量可以自动增长 类似于Hashtable 但两个类的区别在于Hashtable是弱类型的 即它可以包含任何类型的元素 而Dictionary<K,V>包含的元素的Key被预定义为K类型、元素的类型被预定义为V类型 Dictionary<K,V>的属性与方法与Hashtable差不多是一样的 这里不再做罗列 在迭代Dictionary<K,V>类型的集合时 KeyValuePair<K, V> 类型对应于迭代Hashtable时使用的DictionaryEntry 可做如下迭代

 Dictionary<string, Animal> list = new Dictionary<string, Animal>();
 list.Add("animal1", new Animal());
 foreach (KeyValuePair<string, Animal> item in list)
 {
     Console.Write("键:" + item.Key);
     Console.Write("值:" + item.Value.name);
 }

下面通过Dictionary<K,V>类实现计算字符串中字符的重复次数 并输出结果

 string str = "hellohol";
 Dictionary<char, int> list = new Dictionary<char, int>();
 foreach (char s in str)
 {
     if (list.ContainsKey(s))
     {
         list[s] = Convert.ToInt32(list[s]) + ;
     }
     else
     {
         list.Add(s, );
     }
 }
 foreach (char s in list.Keys)
 {
     Console.WriteLine("{0}出现次数为:{1}", s, list[s]);
 }

输出结果

C# - 学习总目录

C# - 集合类 - 集合类型的更多相关文章

  1. C#集合类型大盘点

    C#集体类型( Collections in C#) 集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发当中最常用到的功能之一,几乎是无处不在.俗话 ...

  2. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  3. Redis常用命令入门4:集合类型

    集合类型 之前我们已经介绍过了最基本的字符串类型.散列类型.列表类型,下面我们一起学习一下集合类型. 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易 ...

  4. MySQL数据库数据类型之集合类型SET测试总结

    MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别 ...

  5. 可迭代的集合类型使用foreach语句

    在学习算法这本书图论那一部分的时候,接触到了几个类似for(int w:G.adj(v)),的语句,不是很理解,就去百度,发现这是一种叫做foreach的语法,在书的76页有讲到,但是之前没认真看书, ...

  6. C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能

    1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...

  7. Scala:集合类型Collection和迭代器

    http://blog.csdn.net/pipisorry/article/details/52902549 Scala Collection Scala 集合分为可变的和不可变的集合. 可变集合可 ...

  8. C#集合类型大揭秘 【转载】

    [地址]https://www.cnblogs.com/songwenjie/p/9185790.html 集合是.NET FCL(Framework Class Library)的重要组成部分,我们 ...

  9. Redis自学笔记:3.5入门-集合类型

    3.5集合类型 3.5.1介绍 在集合中的每个元素都是不同的,且没有顺序 表3-4集合类型和列表类型的对比 - 集合类型 列表类型 存储内容 至多232-1个字符串 至多232-1个字符串 有序性 否 ...

随机推荐

  1. CreateObject("Wscript.Shell")用法

    WScript.Shell是WshShell对象的ProgID,创建WshShell对象可以运行程序.操作注册表.创建快捷方式.访问系统文件夹.管理环境变量. 该对象有一个run方法. Run 方法创 ...

  2. Android-锁屏功能

    当屏幕多久没有点击的时候,进行某种操作就是所谓的锁屏功能. onCreate: public void addRunnable() { handler.postDelayed(runnable, Co ...

  3. BGP详解

    相信各位站长在托管服务器或者选择虚拟主机的时候,提供商都会说他们的机房是双线机房,保证你的站点访问速度,那么这里所谓的双线机房到底是何意思,它又为何能提升站点的访问速度呢? 一遍小型机房的所谓双线路其 ...

  4. Webform——页面局部刷新

    有一些数据控件,每次更改它的值后,都会重新查询数据库,然后再重新显示出来. 这样每次都会刷新全部页面,如果是一些信息量很庞大的页面,就会出现卡顿的现象,为了避免这种情况,就用到了局部刷新. 所用到的控 ...

  5. WPF编程学习——动画

    前言 使用动画,是增强用户体验的一种有效的手段.合理的动画,可以让应用程序的界面看起来更加自然.真实.流畅.舒适,更有效地向用户展现信息,用户也更容易接受.同时也增加了软件使用的乐趣,提高用户粘度.( ...

  6. jasperreports-5.6 + jaspersoftstudio-5.6 生成pdf 文件中文无法正常显示问题

    jrxml字段属性设置: <textElement> <font fontName="宋体" pdfFontName="STSong-Light&quo ...

  7. 对ASP.NET程序员非常有用的85个工具

    介绍 这篇文章列出了针对 ASP.NET 开发人员的有用工具. 工具 1. Visual Studio Visual Studio Productivity Power tool:Visual Stu ...

  8. VS.NET2010水晶报表安装部署

    水晶报表VS2010版IDE安装标准版SAP Crystal Reports, version for Visual Studio 2010 - Standard: 下载地址: http://down ...

  9. 用Oracle的TRIM函数去除字符串首尾指定字符

    去掉首尾空格 SELECT TRIM(' abc '), ltrim(' abc '), rtrim(' abc ') FROM dual; 去掉首尾的其他字符 SELECT /*TRIM(';a;b ...

  10. 【HTML】Beginner9:Form

    1.Form     Collect data inputted by a user.     Used as an interface for a web application,or send d ...