zoukankan      html  css  js  c++  java
  • C# 集合类

    集合类:

    个人感觉和数据结构有共通之处,都是对数据集合的整合,方便数据的管理和操作。

    可以使用集合来维护对象组,与数组(Array)不同,集合可以包含更高级的功能,如对包含对象的访问,搜索,排序。数组的大小是固定的,数组元素要事先声明元素类型,而集合元素类型是object;数组需要通过整数下标来访问数组元素,而集合并不需要,如队列和栈;数组可读可写但不能声明只读,而集合可以可以用ReadOnly方法声明只读。

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

    1.ArrayList(数组列表)

    ArrayList可以储存任何类型的元素,相当于List<Object>,其容量是可变的。

    常用的操作方法有:

    名称

    作用
    Add()

    向列表中添加一个元素

    Remove(a)

    移除列表中的一个值为a元素

    RemoveAt(int i)

    移除列表中索引值为i的元素

    Reverse()

    反转数组元素

    Sort()

    以从小到大的顺序排列数组元素

    Clone()

    复制一个数组

     1   static void Main(string[] args)
     2         {
     3             ArrayList a = new ArrayList();
     4             a.Add(100);//单个添加 
     5             foreach (int number in new int[6] { 6, 3, 7, 4, 3, 8 })
     6             {
     7                 a.Add(number);//集体添加方法一 
     8             }
     9             int[] number2 = new int[2] { 14, 16 };
    10             a.AddRange(number2);//集体添加方法二 
    11             a.Remove(3);//移除值为3的 
    12             a.RemoveAt(0);//移除第1个 
    13             ArrayList a2 = new ArrayList(a.GetRange(1, 3));//新ArrayList只取旧ArrayList一部份 
    14 
    15             Console.WriteLine("遍历方法一:");
    16             foreach (int i in a)//不要强制转换 
    17             {
    18                 Console.WriteLine(i);//遍历方法一 
    19             }
    20             Console.WriteLine("遍历方法二:");
    21             for (int i = 0; i < a2.Count; i++)//数组是length 
    22             {
    23                 int number = (int)a2[i];//一定要强制转换 
    24                 Console.WriteLine(number);//遍历方法二 
    25             }
    26             Console.ReadKey();
    27         }

    因为ArrayList元素类型为object类,赋值给number需要强制转换成int类型,不然会报错。

     输出序列为:6 7 4 3 8 14 16    7 4 3

    2.Queue(队列)

    是一种对象的先进先出的集合。Enqueue()方法入队列,Dequeue()方法出队列。

            static void Main(string[] args)
            {
                Queue qu = new Queue();
                Queue qu2 = new Queue();
                foreach (int i in new int[4] { 1, 2, 3, 4 })
                {
                    qu.Enqueue(i);//入队 
                }
                foreach (int i in qu)
                {
                    Console.WriteLine(i);//遍历 
                }
                qu.Dequeue();//出队 
                qu.Dequeue();//出队 
                qu.Enqueue(5);//入队
                Console.WriteLine("Dequeue");
                foreach (int i in qu)
                {
                    Console.WriteLine(i);
                }
                Console.ReadKey();
            }

    输出顺序为1 2 3 4  Dequeue3 4 5.

    3.Stack(栈)

    和Queue一样是一种线性的集合,不过与队列不同,Stack(栈)是后进先出。

    主要通过Push方法入栈,Pop方法出栈。

    4.HashTable(哈希表)

    Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找同时,key是区分大小写;

    哈希表主要的操作有:

    HashtableObject.Add(key,value);//在哈希表中添加一个key/value键值对
    HashtableObject.Remove(key); //在哈希表中去除某个key/value键值对
    HashtableObject.Clear();//从哈希表中移除所有元素
    HashtableObject.Contains(key);//判断哈希表是否包含特定键key

    vlaue用于存储对应于key的值。每个元素都是一个存储在DictionaryEntry对象中的键值对。键不能为空引用,但值可以。当把某个元素添加到HashTable时,将根据键的哈希代码将元素放入存储桶中。该键的后续查找将使用键的哈希代码只在一个特定存储桶中搜索,这就大大减少为查找一个元素所需的键比较的次数。

     1         public static void Main()
     2         {
     3             Hashtable ht = new Hashtable(); //创建一个Hashtable实例 
     4             ht.Add("E", "e");//添加key/value键值对 
     5             ht.Add("A", "a");
     6             ht.Add("C", "c");
     7             ht.Add("B", "b");
     8             string s = (string)ht["A"];
     9             if (ht.Contains("E")) //判断哈希表是否包含特定键,其返回值为true或false 
    10                 Console.WriteLine("the E key:exist");
    11             ht.Remove("C");//移除一个key/value键值    对 
    12             Console.WriteLine(ht["A"]);//此处输出a 
    13             ht.Clear();//移除所有元素 
    14             Console.WriteLine(ht["A"]); //此处将不会有任何输出 
    15 
    16             Console.ReadKey();
    17         }

    HashTable的加载因子确定元素与存储桶的最大比率。加载因子越小,平均查找速度越快,但消耗的内存也增加。默认的加载因子1.0通常提供速度与大小之间的最佳平衡。当创建Hashtable时,也可以指定其他加载因子。当向HashTable中添加元素时,HashTable的实际加载因子将增加。当实际加载因子达到指定的加载因子时,HashTable中存储桶的数目自动增加到大于当前HashTable存储桶两倍的最小质数。

  • 相关阅读:
    Codeforces Round #270 solution
    Codeforces Round #269 (Div. 2) solution
    Codeforces Round #268 (Div. 1) solution(upd div 1 C,div 2 A, B
    Codeforces Round #267 (Div. 2) solution
    Unity 绘制多边形
    DOTween 模仿NGUI Tween
    图像混合模式 正片叠底、滤色、叠加
    一只羊的四个月可以生一只小羊,小羊四个月后又可以生一只小羊 问50个月后有多少只羊(羊不会死)
    Unity CCTween UGUI 动画插件
    Unity UGUI 使用 CCTween 实现 打字效果
  • 原文地址:https://www.cnblogs.com/SeekHit/p/4956065.html
Copyright © 2011-2022 走看看