zoukankan      html  css  js  c++  java
  • C#中四种常用集合的运用(非常重要)【转】

    1.ArrayList

             ArrayList类似于数组,有人也称它为数组列表。ArrayList可以动态维护,而数组的容量是固定的。

    它的索引会根据程序的扩展而重新进行分配和调整。和数组类似,它所存储的数据称为元素,它所保存的元素数就是它的容量。默认初始容量为0,在使用它时,需引入命名空间System.Connections;以下代码可以定义一个ArrayList:

    using System.Collections;

    //创建容量为0的ArrayList对象

    ArrayList myList = new ArrayList();

    //创建容量为5的ArrayList对象

    ArrayList myList = new ArrayList(5);

    //获取对象中实际包含的元素数

    int num = myList.Count();

    ArrayList通过Add()方法添加元素,其方法返回一个Int类型的值,这个值代表所添加的元素在集合中的索引。

    参数:如果向ArrayList中添加的元素是值类型,那么这些元素就会自动装箱处理转换为Object引用类型,然后保存,所以ArrayList中的所有元素都是对象的引用。

    删除ArrayList中的元素有三种方法,分别为:

    对象名.RomoveAt(int index);

    对象名.Romove(Object value);

    对象名.Clear();(这种方法会将集合中的所有元素删除,俗称"清空"~~~)

    2.HashTable

    C# /提供了一种称为HashTable的数据结构,通常称为哈希表,有的人称它为"字典".HashTable的数据是通过键(Key)和值(Value)来组织的,同ArrayList一样,它也属于System.Collections命名空间中,它所存放的每个元素都是键/值对.以下为HashTable的常用方法和属性:

    属性名称:Count

    属性名称:Keys

    属性名称:Values  说明: 获取包含在HashTable中值的集合

    方法名称:Add(Object key,Object Value)

    方法名称:Remove(Object Key)

    方法名称:Clear()

    和ArrayList不同,访问HashTable元素时可以直接通过键名来获取具体值,同样,由于值类型是Object.所以当得到一个值时也需要通过类型转换得到指定类型的对象.

    3. 泛型集合: List<T>

    泛型是C#2.0中的一个新特性。泛型引入了一个新概念:类型参数。通过使用类型参数(T),减少了运行时强制转换成装箱操作的风险。通过泛型集合可以最大限度的重用代码、保护类型的安全及提高性能。

    定义一个 List<T>泛型集合的方法如下:

    List<T> 对象名 = new List<T>();

    List<T>添加元素、获取元素、删除元素以及遍历和ArrayList用法都是类似的,但 List<T>保障了类型的安全性。在获取元素时无需进行类型转换.下面我们把List<T>和ArrayList作以比较

    不用点:List<T>对所保存元素做类型约束,而ArrayList可以增加任意类型。添加、读取值类型元素 List<T>无需拆箱装箱,而ArrayList需要做拆箱、装箱处理。

    相同点:通过索引访问集合中的元素,添加、删除元素方法相同

    4.泛型集合Dictionary<K,V>

    它具有泛型的全部特性,编译时检查类型约束,获取元素时无需类型转换,并且它存储数据的方式和HashTable类似。也是通过Key/Value对元素保存的。定义语法为:

    Dictionary<K,V>对象名 = new Dictionary<K,V>

    <K,V>中的K表示集合中Key的类型,V表示Value的类型,它的含义和List<T>是相同的.例如:

    Dictionary<string,SE> engineers = new Dictionary<string,SE>();

    在这个集合中,Key类型是string类型,Value是SE类型。 下面我们把 Dictionary<K,V> 和HashTable作以比较:

    不同点: Dictionary<K,V>对所保存的元素做类型约束,而HashTable可以增加任何类型。 Dictionary<K,V>添加、读取值类型元素无需拆箱、装箱,而HashTable需要做拆箱、装箱处理

    相同点:通过Key获取Value, 添加、删除、遍历元素方法相同

    如何选择集合类型??

    在.NET Framework中提供了很多集合类,如ArrayList、Hashtable、SortedList、ListDictionary、Queue、NameValueCollection、List<T>、Dictionary<TKey,TValue>及数组等,要了解各个集合的特性,选择合适的集合。

    在所有的集合中数组是性能最高的,如果要存储的数据类型一致和容量固定,特别是对值类型的数组进行操作时没有装箱和拆箱操作,效率极高。

    在选择集合类型时应考虑几点:

    (1)集合中的元素类型是否是一致的,比如集合中将要存储的元素都是int或者都是string类型的就可以考虑使用数组或者泛型集合,这样在存储数值类型元素就可以避免装箱拆箱操作,即使是引用类型的元素也可以避免类型转换操作。

    (2)集合中的元素个数是否是固定的,如果集合中存储的元素是固定的并且元素类型是一致的就可以使用数组来存储。

    (3)将来对集合的操作集中在那些方面,如果对集合的操作以查找居多可以考虑HashTable或者Dictionary<TKey,TValue>这样的集合,因为在.NETFramework中对这类集合采用了特殊机制,所以在查找时比较的次数比其它集合要少。

    另外,在使用可变集合时如果不制定初始容量大小,系统会使用一个默认值来指定可变集合的初始容量大小,如果将来元素个数超过初始容量大小就会先在内部重新构建一个集合,再将原来集合中的元素复制到新集合中,可以在实例化可变集合时指定一个相对较大的初始容量,这样在向可变集合中添加大量元素时就可以避免集合扩充容量带来的性能损失。

    System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。

    System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。

    System.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。

     

    链接:https://www.cnblogs.com/maj99/p/6322626.html

  • 相关阅读:
    解决Android的ListView控件滚动时背景变黑
    倒计时实现网页跳转
    java获取当前路径
    JavaScript笔记之面向对象
    Jqery调用WebService(.Net3.5环境下)
    Android开发:TabActivity中onKeyDown无法响应的解决方法
    最近不知道什么时候开始D3D11CreateDevice返回E_FAIL
    C++ allocator及一些影响程序性能的因素
    AOP切面编程 几年前写的,移过来
    Adaptive Transparency
  • 原文地址:https://www.cnblogs.com/lijianda/p/7899116.html
Copyright © 2011-2022 走看看