C# 数组、ArrayList、List

在C#中,数组、ArrayList、List都能够存储一组对象。

1 数组

1.1 特点

  • 最早出现
  • 在内存中连续存储,索引速度快
  • 插入、删除元素效率低
  • 声明时必须指定类型和大小

1.2 数组的声明

数组的声明方式:

方式一:在定义数组时即给出具体元素,数组的长度由大括号里面元素个数决定。

string[] str = {"str1","str2","str3","str4"}

方式二:在定义数组时即给出具体元素,数组的长度由大括号里面元素个数决定。C#还支持将new关键字作为声明语句的一部分使用。 使用new关键字是告诉“运行时”为数据类型分配内存。任何时候将new关键字作为数组赋值的一部分使用,都可以同时在方括号内指定数组的大小。

string[] str = new string[]{"str1","str2","str3","str4"}

或 string[] str = new string[4]{"str1","str2","str3","str4"}

方式三:先定义数组并给出长度,后赋值。

string[] str=new string[4],

str[0]="str1",

str[1]="str2",

str[2]="str3",

str[3]="str4",

特殊说明:分配一个数组但不指定初始值仍然会初始化每个元素。“运行时”会将每个元素初始化为它们的默认值,如下所示:

  • 引用类型(比如string)初始化为null;
  • 数值类型初始化为零;
  • bool初始化为false;
  • char初始化为\0。

1.3 例程

在 Main 方法中创建一个字符串类型的数组,并存入 5 个值,然后将数组中下标是偶数的元素输出。

class Program
{
    static void Main(string[] args)
    {
        string[] strs = { "aaa", "bbb", "ccc", "ddd", "eee" };
        for(int i = 0; i < strs.Length; i = i + 2)
        {
            Console.WriteLine(strs[i]);
        }
    }
}

2 ArrayList

ArrayList是.NET Framework提供的用于数据存储和检索的专用类。

优点:

  • 可根据存储的数据来动态调整大小,无需指定数组的长度
  • 插入、删除元素效率更高
  • 可以插入不同类型的数据(统一转换成object类型)
  • object是C#中所有类型的基类,如:

缺点:

  • 由于不同类型都能添加进去,在调用时容易出错,类型不安全
  • 赋值和提取都需要和object进行转换,损耗性能

3 泛型List

3.1 特点

  • 在声明List集合时,我们同时需要为其声明List集合内数据的对象类型
  • 避免了数据类型安全问题与装箱拆箱的性能问题

3.2 声明方式

//添加引用
Using System.Collections.Generic;
//声明,T为类型参数,例如bool,byte,int
List<T>list = new List<T>();

3.3 list常见的属性和方法

属性:

  • Capacity: 获取容量的大小(容量大于含有元素的个数)
  • Count: 获取元素个数

方法:

  • Add: 添加元素
  • Insert(): 插入元素
  • Cotains: 判断某个元素是否在list中
  • Clear: 清空
  • Sort(): 对列表中的元素进行从小到大的
  • Reverse(): 将List里面的元素顺序反转
  • RemoveAt(): 移除指定位置的元素
  • IndexOf(): 取得一个元素所在列表中的索引位置(从前往后搜索),没找到返回 -1
  • LastIndexOf: 取得一个元素所在列表中的索引位置(从后往前搜索),没找到返回 -1

3.4 实例讲解

定义一个 int[ ]数组类型的List,添加3个随机数组:[1], [1,2], [1,2,3] 。在索引为0处插入一个新的数组[1,2,3,4], 将list排序反转后,找出[1,2,3,4]的索引值,并显示新添加数组中的最小值和最大值。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            int[] a = new int[1] { 1 };
            int[] b = new int[2] { 1,2 };
            int[] c = new int[3] { 1,2,3 };
            //int[] d = new int[4];
            //d[0] = 1;
            //d[1] = 2;
            //d[2] = 3;
            //d[3] = 4;
            //int[] d = { 1, 2, 3, 4 };
            int[] d = new int[4] { 1,2,3,4 };

            List<int[]> list = new List<int[]>();
            list.Add(a);
            list.Add(b);
            list.Add(c);
            list.Insert(0, d);
            list.Reverse();
            textBox1.Text = list.IndexOf(a).ToString();
            //求解数组中的最大与最小值
            List<int> list1 = new List<int>(d);
            list1.Sort();
            int min = Convert.ToInt32(list1[0]);
            textBox2.Text = min.ToString();
            int max = Convert.ToInt32(list1[list.Count - 1]);
            textBox3.Text = max.ToString();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人自动化控制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值