泛型List(F--01)

 

数组类型的一个典型问题是固定容量。如果您预先不知道数组将容纳多少对象,就会冒着给数组声明太小(溢出)或太大(浪费空间)的空间的风险。

您的程序可能让用户输入数据或从Web站点收集数据。当它发现对象(字符串,书,值等等),将把它们添加进数组,但您并不知道在这段时间内会收集多少数据。固定尺寸的数组并不是一个很好的选择,因为您并不知道需要多大的数组。

List类是一个根据需要动态增加尺寸的数组。它提供了一组有用的方法和属性用于操作。它们中最重要的显示在表9-3中。

9-3 List的方法和属性

方法或属性

作用

Capacity

用于获取或设置List可容纳元素的数量。当数量超过容量时这个值会自动增长。您可以设置这个值以减少容量,也可以调用trin()方法来减少容量以适合实际的元素数目。

Count

属性,用于获取数组中当前元素数量

Item( )

通过指定索引获取或设置元素。对于List类来说,它是一个索引器。

Add( )

List中添加一个对象的公有方法

AddRange( )

公有方法,在List尾部添加实现了ICollection接口的多个元素

BinarySearch( )

重载的公有方法,用于在排序的List内使用二分查找来定位指定元素.

Clear( )

List内移除所有元素

Contains( )

测试一个元素是否在List

CopyTo( )

重载的公有方法,把一个List拷贝到一维数组内

Exists( )

测试一个元素是否在List

Find( )

查找并返回List内的出现的第一个匹配元素

FindAll( )

查找并返回List内的所有匹配元素

GetEnumerator( )

重载的公有方法,返回一个用于迭代List的枚举器

Getrange( )

拷贝指定范围的元素到新的List

IndexOf( )

重载的公有方法,查找并返回每一个匹配元素的索引

Insert( )

List内插入一个元素

InsertRange( )

List内插入一组元素

LastIndexOf( )

重载的公有方法,,查找并返回最后一个匹配元素的索引

Remove( )

移除与指定元素匹配的第一个元素

RemoveAt( )

移除指定索引的元素

RemoveRange( )

移除指定范围的元素

Reverse( )

反转List内元素的顺序

Sort( )

List内的元素进行排序

ToArray( )

List内的元素拷贝到一个新的数组内

trimToSize( )

将容量设置为List中元素的实际数目

 

FCL的习惯是给集合类提供一个Item元素,它在C#中被实现为一个索引器

当您创建了一个List,并没有定义它可以容纳多少对象。在List内添加元素使用Add()方法,列表会自已处理它内部的帐目,如例9-13所示。

9-13 List的使用

 

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  ListCollection
{
    
// 存储于List内的一个简单类
     public   class  Employee
    {
        
private   int  empID;
        
public  Employee( int  empID)
        {
            
this .empID  =  empID;
        }
        
public   override   string  ToString()
        {
            
return  empID.ToString();
        }
        
public   int  EmpID
        {
            
get
            {
                
return  empID;
            }
            
set
            {
                empID 
=  value;
            }
        }
    }
    
public   class  Tester
    {
        
static   void  Main()
        {
            List
< Employee >  empList  =   new  List < Employee > ();
            List
< int >  intList  =   new  List < int > ();
            
// 填充List
             for  ( int  i  =   0 ; i  <   5 ; i ++ )
            {
                empList.Add(
new  Employee(i  +   100 ));
                intList.Add(i 
*   5 );
            }
            
// 打印整数列表所有内容
             for  ( int  i  =   0 ; i  <  intList.Count; i ++ )
            {
                Console.Write(
" {0}  " , intList[i].ToString());
            }
            Console.WriteLine(
" /n " );
            
// 打印员工列表的所有内容
             for  ( int  i  =   0 ; i  <  empList.Count; i ++ )
            {
                Console.Write(
" {0}  " , empList[i].ToString());
            }
            Console.WriteLine(
" /n " );
            Console.WriteLine(
" empList.Capacity: {0} " , empList.Capacity);
        }
    }
}


 

输出结果:

0 5 10 15 20

100 101 102 103 104

empArray.Capacity: 16

(译者注:很有意思,在我的电脑上empArray.Capacity输出的是8,看样子老外的电脑和操作系统跟我们的是有些不同)

Array中,您定义了Array操作对象的数目,如果尝试添加多于这个数目的元素,Array将引发一个异常。在List中,您不需要声明List操作对象的数目。List有一个Capacity属性,表示List能够存储的元素的数目:

public int Capacity { get; set; }

默认容量是16,当您添加第17个元素时,容量会自动翻倍为32。如果您改变for循环为:

for (int i = 0;i<17;i++)

输出结果会变成这样:

0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

empArray.Capacity: 32

您可以手动设置容量为任何等于或大于这个数目的数字。如果您把它设置为小于这个数目的数字,程序将引发一个ArgumentOutOfRangeException异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值