Keep on going never give up.

Let's Go

C# 学习笔记(46)List泛型集合

C#Lonely2019-05-18 20:34:5351次0条

C# 语言中泛型集合是泛型中最常见的应用,主要用于约束集合中存放的元素。由于在集合中能存放任意类型的值,在取值时经常会遇到数据类型转换异常的情况,因此推荐在定义集合时使用泛型集合。

前面《C# ArrayList》与《C# Hashtable》中已经介绍了非泛型集合中的 ArrayList、Hashtable。

非泛型集合中的 ArrayList、Hashtable 在泛型集合中分别使用 List<T> Dictionary<K,V> 来表示,其他泛型集合均与非泛型集合一致。

List所属命名空间using System.Collections.Generic; 继承于IList<T>接口,如下图所示:

image.png

List<T>类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList<T> 泛型接口。

泛型的好处: 它为使用C#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱操作,或对引用类型进行向下强制类型转换,因此性能得到提高。

性能注意事项:

在决定使用IList<T> 还是使用ArrayList类(两者具有类似的功能)时,记住IList<T> 类在大多数情况下执行得更好并且是类型安全的。

如果对IList<T> 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。

添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。

强制转换以及装箱和拆箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。


怎样创建泛型集合?

利用System.Collections.Generic命名空间下面的List<T>泛型类创建集合,语法如下:

List<T> ListOfT = new List<T>();

其中的"T"就是所要使用的类型,既可以是简单类型,如string、int,也可以是用户自定义类型。


List的方法和属性的作用

方法或属性 作用
Capacity

用于获取或设置List可容纳元素的数量。当数量超过容量时,这个值会自动增长。您可以设置这个值以减少容量。

Count 用于获取数组中当前元素数量
Item( ) 通过指定索引获取或设置元素。对于List类来说,它是一个索引器。
Add( ) 添加一个对象到List<T>的结尾处
AddRange( ) 将指定集合元素添加到List<T>的末尾处
BinarySearch( ) 使用指定的比较器在已排序List<T>的某个元素范围中搜索元素,并返回该元素从零开始的索引。
Clear( ) 从List<T>中移除所有元素
Contains( ) 判断某元素是否在List<T>内
CopyTo( ) 把一个List<T>拷贝到一维数组内
Exists( ) 确定List<T>是否包含与指定谓词定义的条件匹配的元素。
Find( ) 查找并返回List<T>内的出现的第一个匹配元素
FindAll( ) 查找并返回List<T>内的所有匹配元素
GetEnumerator( ) 返回循环访问List<T>的枚举数。
GetRange( ) 拷贝指定范围的元素到新的List<T>内
IndexOf( ) 查找指定的对象,并返回整个List<T>中第一个匹配项的从零开始的索引。
Insert( ) 将元素插入List<T>的指定索引处。
InsertRange( ) 将集合中的元素插入List<T>的指定索引处。
LastIndexOf( ) 查找指定对象并返回整个List<T>中最后一个匹配项的从零开始索引。
Remove( ) 从List<T>中移除特定对象的第一个匹配项。
RemoveAt( ) 移除List<T>的指定索引处的元素。
RemoveRange( ) 移除指定范围的元素
Reverse( ) 反转List<T>内元素的顺序
Sort( ) 对List<T>内的元素进行排序
ToArray( ) 将List<T>内的元素拷贝到一个新的数组中
TrimExcess( ) 将容量设置为List<T>中元素的实际数目(如果该数目小于某个阈值)。

代码示例:

using System;
using System.Collections.Generic; //引用命名空间

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建泛型集合对象
            List<string> list = new List<string>();
            //添加一个元素
            list.Add("张三");
            list.Add("李四");
            list.Add("王五");

            //添加一组元素
            list.AddRange(new string[] { "韩梅梅","李雷","沈婷","张丽" });
            list.AddRange(list);

            //在index位置插入一个元素
            list.Insert(0, "岳云鹏");

            //删除指定的第一个元素
            list.Remove("韩梅梅");

            //删除下标为index的元素
            list.RemoveAt(4);

            //从下标index开始,删除count个元素
            list.RemoveRange(0,1);

            //给List里面元素排序
            list.Sort(); //默认是元素第一个字母按升序

            //给List里面元素顺序反转
            list.Reverse();

            //判断某个元素是否在该List中
            if (list.Contains("岳云鹏"))
            {
                Console.WriteLine("岳云鹏在这");
            }
            else
            {
                Console.WriteLine("岳云鹏不在这");
            }

            //清空
            list.Clear();

            //获得List中元素数目
            Console.WriteLine(list.Count);

            //转换为数组
            string[] strArr = list.ToArray();

            //遍历输出
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.ReadKey();

        }
    }
}


暗锚,解决锚点偏移

文章评论

    嘿,来试试登录吧!