C#集合基础与运用
1. 集合接口与集合类型    1
(1) 集合的命名空间    2
(2) 集合接口介绍    2
1、 IEnumerable与IEnumerator接口    2
2、 集合和列表实现的接口表    2
2. 集合的基本操作    2
(1) 创建集合    2
(2) 添加元素    3
(3) 插入元素    3
(4) 访问元素    3
(5) 删除元素    4
(6) 搜索元素    4
(7) 元素排序    4
(8) 类型转换    4
(9) 只读集合    5
(10) 集合常用的扩展方法(常用)    5
3. 常见集合的特性    5
(1) 非泛型集合对应的泛型集合    5
(2) 队列(Queue<T>)    5
(3) 栈(Stack<T>)    6
(4) 链表(LinkedList<T>)    7
(5) 有序列表(SortedList<K,V>)    7
(6) 字典    8
1、 Dictionary<K,V>    8
2、 Lookup<K,V>    8
3、 SortedDictionary<K,V>    8
(7) 集(ISet<T>接口)    8
4. 可观察的集合(深入)    8
(1) ObservableCollection<T>类简介    8
(2) 使用示例    8
5. 位数组(深入)    9
(1) BitArray、BitVector32介绍    9
(2) BitArray    9
(3) BitVector32    10
6. 并发集合(.NET 4新增)    10
(1) ConcurrentQueue<T>    10
(2) ConcurrentStack<T>    10
(3) ConcurrentBag<T>    10
(4) ConcurrentDictionary<K, V>    10
(5) BlockingCollection<T>    10
7. 不同集合类的性能    10
作者:李志伟
时间:2014-01-23
1.集合接口与集合类型
(1)集合的命名空间
大多数集合类都可以在System.CollectionsSystem.Collections.Generic名称空间中到。泛型集合位于System.Collections.Generic名称空间中;专用于特定类型的集合类位于System.Collections.Specialized名称空间中;线程安全的集合位于System.Collections.Concurrent名称空间中。
(2)集合接口介绍
1、IEnumerableIEnumerator接口
其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。
    public interface IEnumerable
    {
        IEnumerator GetEnumerator();
}
IEnumerator对象有什么呢?它是一个真正的集合访问器,没有它,就不能使用foreach语句遍历集合或数组,因为只有IEnumerator对象才能访问集合中的项。IEnumerator接口定义了:一个Current属性用来获取当前集合中的项;MoveNext方法将游标的内部位置向前移动;Reset方法将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
    public interface IEnumerator
    {
        object Current { get; }
        bool MoveNext();
        void Reset();
}
一个collection要支持foreach进行遍历,就必须实现IEnumerable,并以某种方式返回迭代器对象:IEnumerator
2、集合和列表实现的接口表
接口
说明
IEnumerable<T>
如果foreach语句用于集合,就需要此接口。
ICollection<T>
此集合定义了Count属性、CopyToAddRemoveClear方法
IList<T>
可以通过位置访问几何元素
ISet<T>
此集合不允许有重复的元素
IDictionary<K,V>
含有键值对的集合
ILookup<K,V>
含有键值对的集合,但可以通过一个键包含多个值
IComparer<T>
集合元素比较器,用于集合元素的排序
IEqualityComparer<T>
用于字典集合的比较器
IProducerConsumerCollection<T>
线程安全的集合
2.集合的基本操作
(1)创建集合
使用默认的构造函数创建一个空集合,元素添加到集合之后,集合的容量就会扩大为4。当集合的容量被使用完,且还在向集合中添加元素时,集合的容量就会扩大成原来的2倍!可使用Capacity属性设置或访问集合的容量,使用Count属性访问集合的元素个数。也可使用TrimExcess方法调整集合容量,节省内存!
    class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int>();//List<int> list = new List<int>(3)
            for (int i = 0; i < 1025; i++)
            {
                if (list.Count == (list.Capacity))
                {
                    Console.WriteLine("容量使用量:"+list.Count + "/" + list.Capacity);
                }
                list.Add(i);
            }
            Console.WriteLine("容量使用量:" + list.Count + "/" + list.Capacity);
            list.TrimExcess();//调整容量
            Console.WriteLine("容量使用量:" + list.Count + "/" + list.Capacity);
            Console.Read();
        }
}
创建集合时可以为集合设置初始值,如下:
List<int> list = new List<int>() { 1,2,3,4,5,6,7,8,9,0};
List<string> list = new List<int>() { "aa", "bb", "cc" };
(2)添加元素
为集合添加元素可使用Add方法,还可以使用AddRange方法一次添加多个元素,因为AddRange方法的参数是IEnumerable<T>类型的对象,所以可以添加数组到集合里。
    class Program
    {
        static void Main(string[] args)
        {sortedlist
            List<string> list = new List<string>();
            list.AddRange(new string[]{"aa","bb","cc"});//添加数组
            list.AddRange(list);//添加集合
            foreach (string s in list)
            {
                Console.WriteLine(s);
            }
            Console.Read();
        }
    }
(3)插入元素
插入元素可以使用Insert方法,同样使用InsertRange方法插入多个元素,与AddRange方法类似。
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>() { "aa", "bb", "ff" };
            list.Insert(2, "cc");//插入元素
            list.InsertRange(3, new string[] { "dd", "ee" });//插入集合
            foreach (string s in list)
            {
                Console.WriteLine(s);
            }
            Console.Read();
        }
    }
(4)访问元素
可以使用索引器访问集合中某个位置的元素,例如:
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>() { "aa", "bb", "cc" };
            Console.WriteLine(list[1]);//访问第1个位置上的元素,下标从0开始
            Console.Read();
        }
}
集合的遍历,除了使用foreach外,还可以使用集合的Foreach方法,该方法的参数是一个Action<T>委托类型,可以使用Lambda表达式。例如:
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>() { "aa", "bb", "cc" };
            list.ForEach(temp => Console.WriteLine("元素:" + temp));
            //也可使用: list.ForEach(Console.WriteLine);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。