C# 泛型列表List 基本知识(重点内容)
一、什么是泛型
我们直接将对象放入ArrayList,操作直观。但由于集合中的项都是Object类型,因此每次使用都必须就行繁琐的类型转换。那么此时,我们就可以考虑使用泛型来解决。泛型就是类型参数化,处理的数据类型不是固定的,而是可以作为参数传入。
泛型是C# 2.0新增等元素,用于解决一系列如上类似的问题。泛型允许将类名作为参数传递给泛型类型,并生成相应的对象。将泛型(包括类、接口、方法、委托等)看作模板可能更好理解,模板中的变体部分将被作为参数传进来的类名称所代替,从而得到一个新的类型定义。
二、泛型的好处
1、更好的安全性(将运行期的错误转变成编译期);2、更好的可读性;3、省去强转类型的麻烦;
三、如何创建泛型
引入命名空间
System.Collections.Generic
List泛型类创建,语法如下:
List<T> ListOfT = new List<T>();
“T”就是所要使用的类型,即可以是一些简单类型,例:string、int,也可以是用户自定义的类型。
四、泛型示例代码
namespace ConsoleApp1 { class Program { class Person { public string name; //姓名 public int age; //年龄 //创建Person对象 public Person(string name, int age) { this.name = name; this.age = age; } } static void Main(string[] args) { //创建Person对象 Person p1 = new Person("王一", 33); Person p2 = new Person("李二", 28); Person p3 = new Person("张三", 31); //创建类型为Person的对象集合 List<Person> persons = new List<Person>(); //将Person对象放入集合 persons.Add(p1); persons.Add(p2); persons.Add(p3); //输出第2个人的姓名 Console.WriteLine(persons[1].name); Console.Read(); } } }
泛型集合大大简化了集合的实现代码,通过它,可以轻松创建指定类型的集合。
五、List的方法和属性
1、属性
1.1、Capacity 属性:用于获取或设置List可容纳元素的数量;
//获取集合容纳元素数量 int i = persons.Capacity; Console.WriteLine(i.ToString()); //设置集合容纳数量 persons.Capacity = 6; int ii = persons.Capacity; Console.WriteLine(ii.ToString());
当数量超过容量时,这个值会自动增长。也可以设置这个值以减少容量。
1.2、Count 属性:用于获取数组中当前元素数量;
//获取集合数据数量,非集合容量大小 int i = persons.Count; Console.WriteLine(i.ToString());
2、方法
2.1、Add( ) 方法:在List中添加一个对象的公有方法
//创建Person对象 Person p1 = new Person("王一", 33); Person p2 = new Person("李二", 28); Person p3 = new Person("张三", 31); //创建类型为Person的对象集合 List<Person> persons = new List<Person>(); //将Person对象放入集合 persons.Add(p1); persons.Add(p2); persons.Add(p3);
2.2、AddRange( ) 方法:公有方法,在List尾部添加实现了ICollection接口的多个元素
//沿用上述的泛型集合代码 //创建类型为Person的对象集合persons2 List<Person> persons2 = new List<Person>(); //将泛型集合persons赋予persons2 persons2.AddRange(persons);
上述代码是将一个泛型集合对象(persons)直接赋予了新的泛型集合对象(persons2),单纯的数据类型集合,也可以使用如下方式:
string[] stringArray = {"王一", "李二", "张三"}; List<string> StrList= new List<string>(); StrList.AddRange(stringArray);
2.3、BinarySearch( ) 方法:重载的公有方法,用于在排序的List内使用二分查找来定位指定元素
//该方法对于(包括类、接口、方法、委托等),目前我未实现具体方式,以下为其中一种格式代码, class Program { static void Main() { List<string> l = new List<string>(); l.Add("acorn"); // 0 l.Add("apple"); // 1 l.Add("banana"); // 2 l.Add("cantaloupe"); // 3 l.Add("lettuce"); // 4 l.Add("onion"); // 5 l.Add("peach"); // 6 l.Add("pepper"); // 7 l.Add("squash"); // 8 l.Add("tangerine"); // 9 // 查找"banana"的索引位置; int i = l.BinarySearch("banana"); Console.WriteLine(i); // 查找 "apple"的索引位置; i = l.BinarySearch("apple"); Console.WriteLine(i); Console.ReadKey(); } }
2.4、Clear( ) 方法:在List内移除所有元素
persons.Clear();
2.5、Contains( ) 方法:测试一个元素是否在List内
if(persons.Contains(p1)) { Console.WriteLine("存在该元素对象。"); } else { Console.WriteLine("不存在该元素对象!!!"); }
CopyTo( ) 方法:重载的公有方法,把一个List拷贝到一维数组内
Exists( ) 方法:测试一个元素是否在List内
Find( ) 方法:查找并返回List内的出现的第一个匹配元素
FindAll( ) 方法:查找并返回List内的所有匹配元素
GetEnumerator( ) 方法:重载的公有方法,返回一个用于迭代List的枚举器
Getrange( ) 方法:拷贝指定范围的元素到新的List内
IndexOf( ) 方法:重载的公有方法,查找并返回每一个匹配元素的索引
Insert( ) 方法:在List内插入一个元素
InsertRange( ) 方法:在List内插入一组元素
Item( ) 方法:通过指定索引获取或设置元素。对于List类来说,它是一个索引器。
LastIndexOf( ) 方法:重载的公有方法,,查找并返回最后一个匹配元素的索引
Remove( ) 方法:移除与指定元素匹配的第一个元素
RemoveAt( ) 方法:移除指定索引的元素
RemoveRange( ) 方法:移除指定范围的元素
Reverse( ) 方法:反转List内元素的顺序
Sort( ) 方法:对List内的元素进行排序
ToArray( ) 方法:把List内的元素拷贝到一个新的数组内
trimToSize( ) 方法:将容量设置为List中元素的实际数目