java泛型:泛型--List

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

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

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

  表9-3 List思路方法和属性

思路方法或属性 作用
Capacity 用于获取或设置List可容纳元素数量当数量超过容量时这个值会自动增长您可以设置这个值以减少容量也可以trin思路方法来减少容量以适合实际元素数目
Count 属性用于获取中当前元素数量
Item( ) 通过指定索引获取或设置元素对于List类来说它是个索引器
Add( ) 在List中添加个对象公有思路方法
AddRange( ) 公有思路方法在List尾部添加实现了ICollection接口多个元素
BinarySearch( ) 重载公有思路方法用于在排序List内使用 2分查找来定位指定元素.
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 ;
using .Collections.Generic;
using .Text;
ListCollection
{
  //存储于List内个简单类
  public Employee
  {
    private empID;
    public Employee( empID)
    {
      this.empID = empID;
    }
    public override
    {
       empID.;
    }
    public EmpID
    {
      get
      {
         empID;
      }
      
      {
        empID = value;
      }
    }
  }
  public Tester
  {
     void Main
    {
      List<Employee> empList = List<Employee>;
      List<> List = List<>;
      //填充List
      for ( i = 0; i < 5; i)
      {
        empList.Add( Employee(i + 100));
        List.Add(i * 5);
      }
      //打印整数列表所有内容
      for ( i = 0; i < List.Count; i)
      {
        Console.Write("{0} ", List[i].);
      }
      Console.WriteLine("n");
      //打印员工列表所有内容
      for ( i = 0; i < empList.Count; i)
      {
        Console.Write("{0} ", empList[i].);
      }
      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 Capacity { get; ; }

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

  for ( 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异常

Tags:  泛型编程与stl 泛型编程 .net泛型 java泛型

延伸阅读

最新评论

发表评论