泛型之列表的创建和使用

在前面,我们需要存储很多类型一样的数据的时候,我们一般都使用数组来存储并且管理,但是数组有个缺点就是数组的大小是固定的,那么当我们不确定数据的个数的时候,该怎么存储呢?
我们可以使用集合类来进行存储数据,列表List就是集合类的一种。我们可以使用列表很方便的添加、删除数据以及其他的操作。

列表的创建
列表可以存储任何类型的数据,在创建列表对象的时候,我们首先要指定要创建的这个对象要存储什么类型的(泛型)
创建列表的语法规则

//1.创建列表方法1
List<int>scoreList = new List<int>();
                     new List<int>(){1,2,3};
                     new List<string>(){"one","two"};
//2.创建列表方法2
var scoreList = new List<int>();

这里要说的是,为什么列表可以存储不指定数量的数据呢?
列表内部数据实际上是使用数组进行的存储,一个空的列表内部会有一个长度为0的数组,当我们给列表添加元素的时候,列表的容量会扩大为4,如果再添加到第五个元素的时候,列表的大小会重新设置为8,以此类推,每次增加的容量为前一次的两倍。
那么列表的容量是怎么增加的?
每当列表的容量不够用的时候,它会创建一个新的数组,使用Array.Copy()方法将旧数组的元素全部复制到新数组中。但是为了节省时间,如果我们事先知道要存储的个数,可以利用列表的构造函数指定容量的大小。
在这里有个概念需要区分一下:

  • 容量:容量是列表用于存储数据的数组的长度。
  • 元素个数:元素个数是我们添加进去需要管理的数据的个数。

列表的两种遍历方式
用法和数组一样,不详细描述

List<int> list = new List<int>();
            list.Add(12);
            list.Add(34);
            list.Add(56);
            list.Add(78);
            list.Add(90);
            list.Add(453);
            list.Add(342);
            list.Add(8976);

            //for循环遍历
            for(int i = 0; i < list.Count; i++)
            {
                Console.Write(list[i] + " ");
            }
            Console.WriteLine();

            //foreach循环遍历
            foreach(int temp in list)
            {
                Console.Write(temp + " ");
            }

操作列表的属性和方法
既然列表和数组一样能够存储数据,那么也可以操作数据。这里写出一些比较常用的列表操作的方法,如果想要查看列表其他的操作方法,可以在VS里将光标移到List上按F12键。

  1. Capacity获取容量大小
  2. Add()方法添加元素
  3. Insert()方法插入元素
  4. [Index]访问元素
  5. Count属性访问元素个数
  6. RemoveAt()方法移除指定位置的元素
  7. IndexOf()方法取得一个元素所在列表中的索引位置;LastIndexOf()从后往前搜索,搜索到满足条件的就停止,没有找到返回-1
  8. Sort()方法对列表中的元素进行从小到大排序

下面用一个随机生成的列表来实现上面所说的操作

class Program
    {
        static void Main(string[] args)
        {
            //1.生成随机列表
            Console.WriteLine("生成随机列表");
            var list = new List<int>();
            Random r = new Random();
            for(int i = 0; i < 10; i++)
            {
                int random = r.Next(0, 101);
                list.Add(random);
            }
            foreach(int temp in list)
            {
                Console.Write(temp + " ");
            }
            Console.WriteLine();
            Console.WriteLine("获取容量大小");
            Console.WriteLine(list.Capacity);

            //2.插入元素
            list.Insert(3, 1000);
            Console.WriteLine("插入元素'1000'后");
            foreach (int temp in list)
            {
                Console.Write(temp + " ");
            }
            Console.WriteLine();

            //3.访问元素
            Console.WriteLine("访问第5个元素");
            Console.WriteLine(list[4]);

            //4.访问元素个数
            Console.WriteLine("访问元素个数");
            Console.WriteLine(list.Count);

            //5.移除指定位置元素
            Console.WriteLine("移除第5个元素");
            list.RemoveAt(4);
            foreach (int temp in list)
            {
                Console.Write(temp + " ");
            }
            Console.WriteLine();

            //6.取得插入元素的位置
            Console.WriteLine("取得插入元素的位置");
            int index = list.IndexOf(1000);
            Console.WriteLine(index);
            //list.LastIndexOf()方法是从后往前搜索

            //7.对列表进行排序
            Console.WriteLine("对列表进行排序");
            list.Sort();
            foreach (int temp in list)
            {
                Console.Write(temp + " ");
            }
            Console.ReadKey();

        }
    }

泛型这个概念会在下一篇文章讲到,这篇文章所使用的列表都是使用了泛型的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计要求: 1. 设计实现一个出版物的输入输出系统,出版物包括书,CD和磁带,用户选择对某一个出版物输入相关信息,并将输入的信息显示。 2. 各出版物信息包括名字,作者或演唱者,出版社或唱片社,价格,出版日期等相关信息。 3. 使用循环来完成,以接受用户的循环操作。 4. 对于不合要求的输入,给出提示,允许再重新输入。 5. 当用户选择退出时,程序结束。 设计思路: 设计书,CD,磁带三个,每个含有名字,作者或演唱者,出版社或唱片社,价格,出版日期等相关信息。 由于这三个又相关的相同内容,故可设计一个含有公共信息的父。 class MyMedia{ String mediaName; //出版物名称 float price; //出版物价格 String press; //出版社(磁带发行商) String artist; //作者(演唱者) void mediaNameInput() //出版物名称输入 void mediaPriceInput(){ //出版物价格输入 void mediaPressInput(){ //出版社(磁带发行商)输入 void artistInput(){ //作者或演唱者输入 然后分别定义书,CD,磁带三个子,并在各个子中添加新的成员变量。 class MyBook extends MyMedia{ //书子 String editor; //书的编辑 Date publishDate=null; //出版日期 String bookISBN; //书的ISBN } class MyCD extends MyMedia{ //CD子 String cdISRC; //CD的ISRC String cdPublisher; //CD的发行商 } class MyTape extends MyMedia{ //磁带子 String tapeISRC; } 相应改变各个子中的成员函数。 主程序中用下述语句输出选项供用户选择: System.out.println("\n请选择你要进行的操作(请输入1-4中人一个数字):\n" +"1:输入书的信息;\n" +"2:输入CD的信息;\n" +"3:输入磁带的信息;\n" +"4:退出系统;\n"); 用户输入的值保存于变量choice中,程序根据它的值分情况处理: switch(choice){ case 1: //选择为书 //要求输入书的名称,价格等信息的输入相关信息,然后程序输出这些信息 break; case 2: //选择为CD //要求输入CD的名称,价格等信息的输入相关信息,然后程序输出这些信息 break; case 3: //选择为磁带 //要求输入磁带的名称,价格等信息的输入相关信息,然后程序输出这些信息 break; default: //选择错误 continue_e=false; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值