list<T>集合使用学习
今日所得:多敲多练才是捷径 不要空想 不要怕报错 时间宝贵不可浪费
List的方法和属性整理
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中元素的实际数目
学习到了一个概念叫泛型 刚开始接触到 搜索了一下定义
泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。
您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。——————资料来《源菜鸟教程》
看了范例也理解不了 但是我知道类型是什么 所以从类型的角度去理解
我们先整一个类型帮助理解
public class 学生类型
{
public string 名字 { get; set; }
}
namespace ConsoleApp //命名空间
{
public class 学生类型
{
public string 名字 { get; set; }
}
class Program
{
static void Main(string[] args)//程序入口
{
ArrayList 箱子 = new ArrayList();//实例化 及声明变量
for (int i = 0; i < 3; i++)
{
Console.WriteLine("输入一个学生名字");
string 输入 = Console.ReadLine();//用户输入名字
学生类型 学生 = new 学生类型 { 名字 = 输入 };//新建一个学生 把输入的名字给到学生的名字属性
箱子.Add(学生);//把刚才那个学生装到箱子里备用
}
for(int i = 0; i < 箱子.Count; i++)
{
//把箱子里面的东西取出去,然后把它变成学生类型的玩意
学生类型 学生 = 箱子[i] as 学生类型;
Console.WriteLine(学生.名字);
}
}
}
}
再次总结怕写的太乱自己看不懂
ArrayList 箱子 =new ArrayList();
箱子外面什么都没有写 别人都不知道你这个箱子里装的什么 只有你知道里面放的是学生 所以每次都要as一下才知道箱子取出来的是学生
学生类型 学生 = 箱子[i] as 学生类型;
那干脆把事情做的漂亮点 在箱子外面贴个标签 告诉别人里面装的是学生不就好了 我这里找了一个可以贴标签的箱子
List<学生类型> 箱子 = new List<学生类型>();
既然标注了这个箱子里面装的是学生 取出来的时候就直接拿就好
学生类型 学生 = 箱子[i];
再次更改
List<学生类型> 箱子 = new List<学生类型>();
学生类型 学生 = 箱子[i];
class Program
{
static void Main(string[] args)//程序入口
{
List<学生类型> 箱子 = new List<学生类型>();//带学生标签的箱子
for (int i = 0; i < 3; i++)
{
Console.WriteLine("输入一个学生名字");
string 输入 = Console.ReadLine();//用户输入名字
学生类型 学生 = new 学生类型 { 名字 = 输入 };
//把刚才那个学生装到箱子里备用
箱子.Add(学生);//把刚才那个学生装到箱子里备用
}
for(int i = 0; i < 箱子.Count; i++)
{
学生类型 学生 = 箱子[i]; //直接拿出来就用,不用弄(as)一下
Console.WriteLine(学生.名字);
}
}
}
ArrayList 和 List<> 都是一种类型 但是因为 List<> 带了一个标签所以就叫 泛型 因为带了标签 传递给别人就很方便
方法上留了标签,这个方法就成了泛型方法
//把字符串转换成 T 类型
public T 转换成<T>(string 字符串)
这个方法留了一个标签空位他就是类型参数 你只要这个标签空位(类型参数)里填个什么东西 他就会想办法把转换成标签空位(类型参数)里的东西
//字符串变日期
DateTime 日期 = 转换成
//字符串大变人名
学生类型 学生 = 转换成<学生类型>("张三");
提供这个 转换成<T> 方法的人一看 这 <T> 留的太随意了
以他跟你约法三章(泛型约束)只能出日期或者人名 别的太复杂的不行啊
//只能变成 struct 的东西啊
public T 转换成
还有一篇的参考文章 C# List<T>的详细用法 来源于空城幻雪
https://blog.csdn.net/u012943521/article/details/82288087
List泛型集合是C#编程中的经常使用的集合之一,相对数组它可以动态的添加元素而不是声明的时候就必须指定大小。相对于ArrayList集合和Hashtable集合的优势是其元素的数据类型可以确定。而不是默认的父类类型object。
List泛型集合的声明与元素添加
1.List泛型集合的声明:
List<数据类型> 变量名=new list<数据类型>();
2.List泛型集合的声明案例:
//声明一个List泛型集合的变量listNew
List<string> listNew=new List<string>();
注意:
1,以上代码声明的是一个string类型的泛型集合,其元素必须都为string型。
2,可以声明其他元素的泛型集合,只需要将string改成对应类型便可。
3.List泛型集合添加元素的Add()方法:
代码案例:为第二步声明的集合添加五个元素:
listNew.Add("一号元素");
listNew.Add("二号元素");
listNew.Add("三号元素");
listNew.Add("四号元素");
listNew.Add("五号元素");
说明:
1,List泛型集合只能使用Add()方法添加元素,不能直接指定下标赋值如:“listnew[0]="一号元素";”这样的语句是不合法的。因为List泛型集合在声明之后没有添加元素之前是空的,直接指定下标赋值会导致索引超出范围。
2,一旦元素添加成功,指定下标修改集合中的元素,如在这个声明例子中我们可以将"二号元素"改成任何字符串,如“你好”。
listNew[1]="你好";
3,List泛型集合和数组一样,其下标是从0开始的。
因为元素是字符串,我们也可以添加一个字符串数组在集合中,使用AddRange()方法便可:
案例)为listNew集合添加一个字符串数组
代码:
//声明一个字符串数组,有三个字符串元素
string[] str=new string[]{"六号元素","七号元素","八号元素"};
//使用AddRange()方法将元素添加到集合中
listNew.AddRange(str);
//添加成功
添加完成之后该集合便有了8个元素。
List泛型集合的常用属性
1.Count属性
返回List泛型集合中元素的数量。
如我们对上面已经添加过元素的集合获得其Count属性值
Console.WriteLine(listNew.Count); //输出ListNew集合的元素数量
输出值为:5
2.Capacity属性
返回在不增加大小的情况下目前List泛型集合的容量
List泛型集合在添加元素的时候容量是变化的,其过程(原理)如下:
当添加元素的时候集合的容量不足以容纳所有元素就会自动增加目前元素数一倍的容量。
所以在上面的例子中listNew集合的容量的增加过程如下:
添加第一个元素的时候Capacity的值为1;
添加第二个元素的时候Capacity的值为2;
添加第三个元素的时候Capacity的值为4;
添加第四个元素的时候Capacity的值为4;
添加第五个元素的时候Capacity的值为8;
List泛型集合的常用方法:
1.Add()方法,添加元素的方法,前面已经讲过
2.Clear()方法,无返回值,清空集合中的所有元素
案例:清空ListNew集合中的所有元素
listNew.Clear();
3.Contains()方法,返回布尔型数据,参数为集合中元素的数据类型
功能:检查集合中是否存在某元素
案例:检查listNew集合中是否存在字符串元素"一号元素"。
代码:listNew.Contains("一号元素");
返回值为:true。
4.Equals()方法
比较两个List泛型集合是否相等
举例,比较listNew集合与listold集合是否相等:
代码:listNew.Equals(listold); //本人就不声明listold集合了,理解Equals()方法即可。因为不常用。
5.Indexof()返回值为int,从索引位置0开始查找元素,并得到索引值
比如我们要在listNew集合中查找元素"四号元素"的第一个索引位置(考虑到有多个"四号元素的情况")
代码:
listNew.Indexof("四号元素");
返回值为:3。
6.Insert()方法,插入元素
如我们在listNew集合的索引位置3上插入"三点五号元素"
listNew.Insert(3,"三点五号元素");
插入后元素数量变为增加了1,原来索引3位置上的元素在索引位置4上了,后面的元素全部向后移动了一格。
7.Remove()方法,删除指定元素
如我们删除刚刚添加的"三点五号元素"
代码:listNew.Remove("三点五号元素");
删除这个元素之后后面的元素会上移一个索引位置
8.RemoveAt()方法,根据索引位置删除元素
如:我们删除当前三号索引位置处的元素
代码:listNew.RemoveAt(3);
删除这个元素之后后面的元素会上移一个索引位置。
9.Reserve()方法,将集合中的所有元素反向排序
如,我们将listNew集合中的所有元素反向排序
代码:listNew.Reserve();
反向排序之后集合中元素的索引会有改变
10.ToArray()方法,将集合转换为数组
如我们将listNew集合转换为一个string数组
string[] str=listNew.ToArray();