第十一章:集合

1、列表:泛型类List

该类实现了IList、ICollection、IEnumerable、IList、ICollection和IEnumerable接口。

  • 1、创建列表:元素添加到列表中,如果列表的容量不够,就会将列表的容量重新设置为原来的2倍;
        var intList = new List<int>();
        //Racer是一个类,包含5个属性int id,string firstname,string lastname,string country,int wins
        var racers = new List<Racer>(); 
  • Capacity属性:可以获取和设置集合的容量;
  • Count属性:获取集合中元素的个数;
  • TrimExcess()方法:如果已经将元素添加到列表中,且不需要添加更多的元素,调用该方法去除掉不需要的容量。但是,如果元素个数超过了容量90%,该方法就没有用了。
  • 2、集合初始值设定:在初始化集合时,在花括号中给集合赋值;
        var intList = new List<int>() { 1, 2 };
        var racers = new List<Racer>() { new Racer(3, "a", "b", "c", 10) };
  • 3、列表添加元素:Add()方法添加单个元素和AddRange()方法添加多个元素;

        //Add()方法添加单个元素
        var intList = new List<int>();
        intList.Add(4);
        var racers = new List<Racer>();
        racers.Add(new Racer(6, "f", "g", "s", 50));
        //AddRange()方法添加多个元素
        racers.AddRange(new Racer[] {
            new Racer(8,"f","g","d",10),
            new Racer(9,"r","f","j",88)
            });
  • 4、插入元素:Insert()方法可以在指定位置插入单个元素,InsertAange()方法提供了在指定位置插入大量元素的功能;

        racers.Insert(2, new Racer(11, "d", "g", "o", 99));
        racers.InsertRange(1, new Racer[]
        {
            new Racer(80,"f","g","d",34),
            new Racer(90,"r","f","j",5)
        });
  • 5、访问集合中的元素:实现了IList和IList接口的所有类都提供了一个索引器,可以通过索引器来访问其中的元素;

        for (int i = 0; i < racers.Count; i++)
        {
            WriteLine(racers[i]);
        }
        //List<T>集合实现了IEnumerable接口。可以使用foreach语句
        foreach (var racer in racers)
        {
            WriteLine(racer);
        }
  • 6、删除集合中的元素:RemoveAt()方法按照索引删除元素,Remove()方法直接删除元素(过程:用IndexOf()获取元素索引,再使用索引删除元素)RemoveRange()方法可以从集合中删除许多元素(第一个参数指定了开始删除的元素索引,第二个参数指定了要删除的元素个数)

  • 7、搜索:可以搜索元素的索引,也可以搜索元素本身。常用的方法有IndexOf(),LastIndexOf(),FindIndex(),FindLastIndex(),Find()和FindLast()。
  • 8、排序:使用Sort()方法对元素进行排序。Sort()方法使用快速排序算法,比较所有的元素,直到整个列表排好序为止。Sort()方法使用了几个重载的方法,传递的参数可以是泛型委托Comparison和泛型接口IComparer,以及一个范围值和泛型接口IComparer;
        //集合中的元素实现了IComparable接口,才能使用不带参数的Sort()方法;
        public void List<T>.Sort(); 
        public void List<T>.Sort(Comparison<T>);
        public void List<T>.Sort(IComparer<T>);
        public void List<T>.Sort(Int32, Int32, IComparer<T>);

2、只读集合

创建集合后,它们就是可读写的,但是,在填充完集合后,可以创建只读集合,此时,只要调用AsReadOnly()方法。

3、队列

队列是其元素以先进先出(FIFO)的方式来处理的集合。使用泛型类Queue来实现。该类实现了ICollection和IEnumerable接口,但是,没有实现ICollection接口,所以不能使用Add()和Remove()方法,也没有实现IList接口,所以不能用索引器访问队列。

Queue类的成员说明
Count返回队列中的元素个数
Enqueue在队列的一端添加一个元素
Dequeue在队列的头部读取和删除元素,如果调用该方法时,队列中没有元素,抛出InvalidOperationException异常
Peek从队列的头部读取一个元素,但不删除它
TrimExcess重新设置队列的容量

4、栈

栈是一个先进后出(LIFO)的容器。使用泛型类Stack,实现了IEnumerable和ICollection接口。

Stack类的成员说明
Count返回栈中元素的个数
Push在栈顶添加一个元素
Pop从栈顶删除一个元素,并返回该元素。如果栈是空的,抛出InvalidOperationException异常
Peek返回栈顶的元素,但不删除它
Contains确定某个元素是否在栈中,如果是,就返回true

5、链表LinkedList

LinkedList是一个双向链表,其元素指向它前面和后面的元素。这样一来,通过移动到下一个元素可以正向遍历整个链表,通过移动到前一个元素可以反向遍历整个链表。

LinkedList类定义了一些成员和方法,对元素进行操作:
- First和Last:访问链表中的第一个和最后一个元素;
- AddAfter()、AddBefore()、AddFirst()和AddLast()方法:在指定的位置插入元素;
- Remove()、RemoveFirst()和RemoveLast()方法:删除指定位置的元素;
- Find():从链表的开头开始搜索元素;
- FindLast():从链表的结尾开始搜索元素。

6、链表的优缺点

优点:


  • 1、插入元素的效率高。如果将元素插入列表的中间位置,使用链表就会非常快。在插入一个元素时,只需要修改上一个元素的Next引用和下一个元素的Previous引用,使它们引用所插入的元素。
    缺点:
  • 1、查找特定元素的效率低。链表的元素只能一个接一个的访问,需要较长的时间来查找位于链表中间或尾部的元素。
  • 2、链表不能再列表中近存储元素。存储元素时,链表还必须存储每个元素的下一个元素和上一个元素的信息。这时,使用LinkedListNode的属性List、Next
    、Previous和Value。

  • [List属性]:返回与节点相关的LinkedList对象;
  • [Next和Previous属性]:用于遍历链表,访问当前节点之后和之前的节点;
  • [Value属性]:返回与节点相关的元素,类型是T;

7、有序列表

基于键对所需集合排序,可以使用SortedList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值