你的位置:首页 > 软件开发 > ASP.net > C# 集合 转载

C# 集合 转载

发布时间:2015-05-27 00:00:25
C#集合先来了解下集合的基本信息1、BCL中集合类型分为泛型集合与非泛型集合。2、非泛型集合的类和接口位于System.Collections命名空间。3、泛型集合的类和接口位于System.Collections.Generic命名空间。  ICollection接口是Syst ...
C#集合
  public class StringLengthComparer : IComparer<get='_blank'>string>  {    public int Compare(string s1, string s2)    {      if (s1.Length > s2.Length)      {        return (1);      }      else if (s1.Length < s2.Length)      {        return (2);      }      else      {        return (0);      }    }  }
C# 集合 转载

说完了集合接口,现在开始说集合。

1、ArrayList

  ArrayList实现了IList、ICollection、IEnumerable接口。

  ArrayList与Array的名字很相似,现在来比较一下两者的异同。

  相同点:

  (1)、两者都实现了IList、ICollection、IEnumerable接口。

  (2)、两者都可以使用整数索引访问集合中的元素,包括读取和赋值,且集合中的索引都从0开始。

  不同点:

  (1)、ArrayList是集合,而Array是数组。

  (2)、ArrayList是具体类,Array是抽象类。

  (3)、数组必须在实例化时指定元素的数量,该数量一旦确定就不可以更改了,而ArrayList扩展了这一点,当实例化一个ArrayList实例时可以不指定集合元素数(有默认初始容量),当然你也可以指定初始容量。

  (4)、获取数组的元素数时使用Length属性,而获取ArrayList集合的元素数时使用Count属性。

  (5)、数组可以有多维,而ArrayList只能是一维。

来看ArrayList具体提供的功能

属性              说明

Capacity              获取或设置 ArrayList 可包含的元素数。 

    static void Main(string[] args)    {      ArrayList arrayList = new ArrayList();      arrayList.Add(1);            //Add方法,将一个元素添加到ArrayList中      arrayList.Add("你好");      arrayList.Add(3.265);      IList iList = arrayList;      ICollection iCollection = iList;      IEnumerable iEnumerable = iCollection; //体现了ArrayList的继承关系      foreach (object obj in iEnumerable)      {        Console.WriteLine(obj.ToString());      }      bool b = arrayList.Contains("你好"); //确定ArrayList中是否包含某元素      Console.WriteLine(b);         //输出 True      object[] objArr = new object[arrayList.Count + 1];      objArr[0] = "我是用来占位的";      arrayList.CopyTo(objArr, 1); //便宜一位,也就是接受数组从1开始,默认是0      foreach (object obj in objArr)      {        Console.Write(obj.ToString() + "-");  //输出 我是用来占位的-1-你好-3.265-      }      Console.WriteLine();      ArrayList AL = ArrayList.FixedSize(arrayList); //静态方法 返回一个固定大小的ArrayList对象,数量不许改变。也就是说不能添加和删除。      Console.WriteLine(AL.IsFixedSize); //输出True      //AL.Add(111); 此处报异常,"集合的大小是固定的"      ArrayList ALReadOnly = ArrayList.ReadOnly(arrayList);      Console.WriteLine(ALReadOnly.IsReadOnly);  //输出True      ArrayList AL1 = arrayList.GetRange(1, 2);  //按照索引顺序截取出子集      foreach (object obj in AL1)      {        Console.Write(obj.ToString()); //输出 你好3.265  可以截取出的新ArrayList只包含1,2位      }      Console.WriteLine();      int indexLocation = arrayList.IndexOf(1);  //从左边开始检索,返回第一个匹配到的元素的顺序      Console.WriteLine(indexLocation);  //输出 0      arrayList.Add(1);    //为了体现LastIndexOf的不同,先添加一个1      int lastLocation = arrayList.LastIndexOf(1);      Console.WriteLine(lastLocation);  //返回3      arrayList.Insert(2, "Insert插入的元素"); //这个方法与Add的不同在于它可以在任意位置插入      foreach (object obj in arrayList)      {        Console.Write(obj.ToString() + " ");  //输出 1 你好 Insert插入的元素 3.265 1      }      ArrayList arr = new ArrayList();      arr.Add(1);      arr.Add(2);      arrayList.AddRange(arr);      foreach (object obj in arrayList)      {        Console.Write(obj.ToString() + "-");  //输出 1 你好 Insert插入的元素 3.265 1 1 2可以看到将一个新的集合追加到了最后      }      arrayList.Remove(2);      foreach (object obj in arrayList)      {        Console.Write(obj.ToString() + "-");  //输出 1 你好 Insert插入的元素 3.265 1 1 可以看到2已经被移除了      }      Console.WriteLine();      arrayList.RemoveAt(0);      foreach (object obj in arrayList)      {        Console.Write(obj.ToString() + "-");  //输出 你好 Insert插入的元素 3.265 1 1 可以看到第0个元素"2"已经被移除了      }      Console.WriteLine();      //arrayList.Reverse();      //foreach (object obj in arrayList)      //{      //  Console.Write(obj.ToString() + "-");    //输出顺序倒转的所有元素      //}      ArrayList AL3 = new ArrayList();      arrayList.SetRange(0,AL3);   //从第0位开始,将元素复制到AL3中      foreach (object obj in AL3)      {        Console.Write(obj.ToString() + "-");  //输出 你好 Insert插入的元素 3.265 1 1      }      object[] objArrs = new object[arrayList.Count];      objArrs = arrayList.ToArray();      foreach (object obj in objArrs)      {        Console.Write(obj.ToString() + "-");      }      Console.WriteLine();      arrayList.Capacity = 5;   //读取或设置可包含元素的数量,如果小于当前会报错。      Console.WriteLine(arrayList.Count);   //输出5        arrayList.TrimToSize();      Console.WriteLine(arrayList.Count);   //输出5       Console.ReadKey();    }
C# 集合 转载

2、非泛型集合HashTable

   Hashtable实现了IDictionary、ICollection以及IEnumerable接口。注意Hashtable,t是小写的。由于是非泛型集合,因此存储进去的都是object类型,不管是键还是值。

  Hashtable的要点。

  (1)、Hashtable仅有非泛型版本。

  (2)、Hashtable类中的键不允许重复,但值可以。

  (3)、Hashtable类所存储的键值对中,值可以为null,但键不允许为null。

  (4)、Hashtable不允许排序操作。

  以下给出一个实例,Hashtable提供的功能是在于ArraryList差不多,只不过存储的是键值对而已。只写个基本短小的示例。

C# 集合 转载
    static void Main(string[] args)    {      Queue q = new Queue();      q.Enqueue(1);      q.Enqueue("想家了!");      q.Enqueue(1.23);      Console.WriteLine(q.Peek());  //输出1 获取值但不移除,与出列不同      int Count = q.Count;      //出队的时候q.Count在变化,因此q.Count放在循环条件里是不妥的      for (int i = 0; i < Count; i++)      {        Console.WriteLine(q.Dequeue().ToString()); //注意 输出 1 想家了 1.23 都是从最先添加的先拿      }      Console.WriteLine(q.Count); //输出0 出列一次,就自动移除了。      Queue<int> qInt = new Queue<int>();      qInt.Enqueue(1);      qInt.Enqueue(2);      qInt.Enqueue(3);      Console.WriteLine(qInt.Peek());   //输出1      int IntCount = qInt.Count;      for (int i = 0; i < IntCount; i++)      {        Console.WriteLine(qInt.Dequeue()); //注意 输出 123 都是从最先添加的先拿      }      Console.WriteLine(q.Count); //输出0 出列一次,就自动移除了。      Console.ReadKey();    }
C# 集合 转载

4、Stack和Stack<T>

  Stack称为栈,栈和队列非常相似,只不过队列是先进先出,而栈中的数据添加和移除都在一端进行,遵守栈中的数据则后进先出。Stack类实现了ICollection和IEnumerable接口。

  Stack类的一些重要特性如下:

  1、后进先出。

  2、可以添加null值到集合中。

  3、允许集合中的元素重复。

  4、Stack的容量会按需自动增加。

列出几个有特点的功能。

成员      类型        说明

Clear      方法         从Stack中移除所有对象

Contains    方法         确定某元素是否在Stack中

Push      方法         将对象插入Stack的顶部  入栈

Pop      方法         移除并返回Stack顶部的对象  出栈

Peek       方法         返回位于Stack顶部的对象,但不移除,注意出栈是移除的。它不移除仅仅返回。

Count      属性         获取Stack中包含的元素

C# 集合 转载
    static void Main(string[] args)    {      SortedList SL = new SortedList();      SL.Add("txt","txt");          //Add的时候会自动排序      SL.Add("jpg","jpg");      SL.Add("png","png");      foreach (DictionaryEntry de in SL)   //返回的是DictionaryEntry对象      {        Console.Write(de.Key + ":" + de.Value + " "); //输出 jpg:jpg png:png txt:txt  //注意这个顺序啊,添加的时候就自动排序了      }      Console.WriteLine();      SortedList<int,string> SLString = new SortedList<int,string>();      SLString.Add(3, "333");      SLString.Add(2, "222");      SLString.Add(1, "111");      foreach (KeyValuePair<int,string> des in SLString) //返回的是KeyValuePair,在学习的时候尽量少用var,起码要知道返回的是什么      {        Console.Write(des.Key + ":" + des.Value + " ");      }      Console.ReadKey();    }
C# 集合 转载

 6、BitArray

  BitArray类实现了一个位结构,它是一个二进制位(0和1)的集合。BitArray的值表示true或false。true表示位打开,false表示位关闭。BitArray实现了ICollection和IEnumerable接口。

  BitArray的一些特性如下:

  1、BitArray集合不支持动态调整,因此没有Add和Remove方法。

  2、若需要调整集合的大小,可通过设置属性Length的值来实现。

  3、集合中的索引从0开始。

  4、使用BitArray(int length)构造函数初始化BitArray集合后,其值均为false。

  5、BitArray集合之间支持按位“或”、“异或”、“与运算”,参与这三类运算的BitArray集合长度必须相等。否则会抛出异常。

抱着MSDN来学习下:

属性          说明 

Count         获取 BitArray 中包含的元素数。 

    static void Main(string[] args)    {      BitArray BA = new BitArray(3);      BA[0] = true;      BA[1] = false;      BA[2] = true;      BitArray BB = new BitArray(3);      BA[0] = true;      BA[1] = false;      BA[2] = true;      BitArray BOr = BA.Or(BB); //与运算,返回一个新的BitArray      foreach (var b in BOr)      {        Console.Write(b + "-");   //True-False-True      }      Console.ReadKey();    }
C# 集合 转载

 


原标题:C# 集合 转载

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录