---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
看了视频,视频中用到List类,泛型集合,感觉很好用,什么类型都能存储,像数组一样,又比数组好用,可变的长度,在很多地方很强大,微软给我们封装了的一些类真的很强大,视频中没有详细的讲解集合,不过有让我们利用MSDN可以自学,今天我就自学了下,有了一个初步的了解,List类中最强大的是他有很多已经写好的方法方便我们调用,我了解了下各个方法的功能,有很多关于委托的定义,委托我只是知道,不知道委托具体怎么定义的(好像也是一个方法),所以有些方法的功能还不了解,还有很多的扩展方法,如果是操作数据库的话,应该很实用,另外关于显示接口也不知道,这些内容以后再做进一步的了解,下面是我的总结的关于List的类和一些简单方法的实现.
using System;
using System.Collections.Generic;//集合的命名空间
using System.Linq;
using System.Text;
namespace List类的初步了解
{
class Program
{
static void Main(string[] args)
{
//List类 \list n.清单,目录
//表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。
//之前接触的数组有很多不可控制的地方,集合要方便得多,还提供了很多的有效的方法
//类的方法
// public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>
// , IList, ICollection, IEnumerable
//简单的理解下,List类继承了三个类和三个接口,这样便继承了父类中的方法和属性
//类的命名空间
//System.Collections.Generic \程序一开始已经默认的引用了这个空间,可见其实用性
//类的构造方法
//List<T>() 初始化 List<T> 类的新实例,该实例为空并且具有默认初始容量。
// \可以根据添加的元素大小,自定义调节集合大小,最为常用
//List<T>(Int32) 初始化 List<T> 类的新实例,该实例为空并且具有指定的初始容量。
// \知道了元素的个数,为其指定大小
//List<T>(IEnumerable<T>) 初始化 List<T> 类的新实例,
// 该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。
// \可以直接通过构造方法将一个指定的集合元素整个复制到新集合中
//通过string类型调用构造方法如下:
List<string> listStr1 = new List<string>();
List<string> listStr2 = new List<string>(10);
List<string> listStr3 = new List<string>(listStr2);
//类的属性
//Capacity 内部数据结构在不调整大小的情况下能够容纳的元素总数。
//Count List<T> 中实际包含的元素数。
//Item 指定索引处的元素。\可使用一个整数索引访问此集合中的元素。 此集合中的索引从零开始
//通过 listStr2 显示出各属性的值
listStr2.Add("王小虎");
listStr2.Add("王小龙");
Console.WriteLine("listStr2.Capacity={0},listStr2.Count={1}, listStr2[1]={2}", listStr2.Capacity
, listStr2.Count, listStr2[1]);
//输出结果为:
//listStr2.Capacity=10,listStr2.Count=2,listStr2[1]=王小龙 \Item为1时,第二个元素为王小龙
//类的方法
//此类有众多的方法,这里只对一些常用的方法进行简单调用,来看看各方法的作用
listStr2.Add("王小帅");//Add()方法,将对象添加到 List<T> 的结尾处
listStr1.Add("王黑豹");
listStr2.AddRange(listStr1);//AddRange()方法,将指定集合的元素添加到 List<T> 的末尾
IList<string> listStr4 = listStr2.AsReadOnly();//返回当前集合的只读 IList<T> 包装
//listStr4[0] = "李小虎";\错误的,listStr4设置成只读,不能改变元素的值
foreach (string s in listStr4)
{
Console.WriteLine(s);
}
// BinarySearch()方法,使用默认的比较器在整个已排序的 List<T> 中搜索元素,并返回该元素从零开始的索引
int itemStr2=listStr2.BinarySearch("王小帅");//这里的牵引值为2
listStr1.Clear();//从 List<T> 中移除所有元素。
Boolean b = listStr2.Contains("王小帅");//Contains()方法,确定某元素是否在 List<T> 中
Console.WriteLine(b);//返回值为true
//CopyTo()方法,将整个 List<T> 复制到兼容的一维数组中,从目标数组的开头开始放置
string[] name = new string[10];
string[] name1 = new string[10];
string[] name2 = new string[10];
listStr2.CopyTo(name);
//CopyTo()方法的重载
listStr2.CopyTo(name1, 5);//将整个 List<T> 复制到兼容的一维数组中,从目标数组的开头开始放置
//将一定范围的元素从 List<T> 复制到兼容的一维数组中,从目标数组的指定索引位置开始放置
listStr2.CopyTo(2, name2, 2, 2);
Boolean bo = listStr2[1].Equals("王小紫");//Equals()虚方法,判断指定值是否等于当前值
//Exists()方法,确定 List<T> 是否包含与指定谓词所定义的条件相匹配的元素
//listStr2.Exists(Predicate<string>Math),这里有关于委托,暂时不做了解,等理解了委托后再学习
//关于Find方法和重载一样关于委托,放到后面去学习
listStr2.ForEach(delegate(string s)
{
Console.WriteLine(s);
});
//类似于foreach
//GetType()方法,获取当前实例的 Type.(继承自 Object),这里Type相同,返回为true
Boolean boo=Object.ReferenceEquals(listStr2[2].GetType(), name[2].GetType());
//搜索指定的对象,并返回整个 List<T> 中第一个匹配项的从零开始的索引,这里是第二个,返回值为1
int it=listStr2.IndexOf("王小龙");
//IndexOf()方法的重载如下
//搜索指定的对象,并返回 List<T> 中从指定索引到最后一个元素的元素范围内第一个匹配项的从零开始的索引。
int it1 = listStr2.IndexOf("王黑豹", 4);//从下标为4的地方查找,没有找到指定对象,返回-1
//搜索指定的对象,并返回 List<T> 中从指定的索引开始并包含指定的元素数的元素范围内第一个匹配项的从零开始的索引。
int it2 = listStr2.IndexOf("王小虎", 2, 2);//从下标为2的地方查找,查两次,没有找到指定对象,返回-1
listStr2.Insert(4, "王小新");//在指定位置插入元素
listStr2.Remove("王黑豹");//移除指定元素
//RemoveAll 移除与指定的谓词所定义的条件相匹配的所有元素。还是用到了委托
listStr2.RemoveAt(1);//移除指定位置的元素
listStr2.RemoveRange(2, 1);//从指定位置移除几个元素
listStr2.Reverse();//将整个 List<T> 中元素的顺序反转
//Reverse(Int32, Int32) 将指定范围中元素的顺序反转
listStr2.Reverse(0, 1);
//ToString 返回表示当前对象的字符串。 (继承自 Object。)不用多说
//List类中还有很多的扩展方法,及显示接口实现,第一次初步的了解,以后进一步的深入了解
//备注
//List<T> 不保证是排序的。 在执行要求 List<T> 已排序的操作(例如 BinarySearch)之前,
// 您必须对 List<T> 进行排序。
//List<T> 类是 ArrayList 类的泛型等效类。 该类使用大小可按需动态增加的数组实现 IList<T> 泛型接口。
//List<T> 类既使用相等比较器又使用排序比较器
//List<T> 接受 null 作为引用类型的有效值并且允许有重复的元素
//可使用一个整数索引访问此集合中的元素。 此集合中的索引从零开始
Console.ReadKey();
}
}
}