当前位置:
首页 > 编程开发 > Objective-C编程 >
-
泛型-List
制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
数组类型的一个典型问题是固定容量。如果您预先不知道数组将容纳多少对象,就会冒着给数组声明太小(溢出)或太大(浪费空间)的空间的风险。
您的程序可能让用户输入数据或从Web站点收集数据。当它发现对象(字符串,书,值等等),将把它们添加进数组,但您并不知道在这段时间内会收集多少数据。固定尺寸的数组并不是一个很好的选择,因为您并不知道需要多大的数组。
List类是一个根据需要动态增加尺寸的数组。它提供了一组有用的方法和属性用于操作。它们中最重要的显示在表9-3中。
表9-3 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异常。
数组类型的一个典型问题是固定容量。如果您预先不知道数组将容纳多少对象,就会冒着给数组声明太小(溢出)或太大(浪费空间)的空间的风险。
您的程序可能让用户输入数据或从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中元素的实际数目 |
当您创建了一个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异常。
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数