面向对象编程——什么是集合?集合与数组的区别是什么?

集合

什么是集合

在定义集合时,我们通常会将集合和数组进行比较。

数组

数组是一组相同数据类型数据的集合,可以通过下表对元素进行操作。但是数组也存在缺点,它采用固定长度且元素相对操作比较繁琐。

集合类(集合)

为了解决数组存在的这些问题,.NET中引入集合对象,其长度可以调整且元素操作简单方便。

在软件开发过程中,经常需要保存各种数据,因此计算机在处理问题时就需要解决一下3个问题:

(1)如何方便高效地组织和显示数据

(2)如何存储数据

(3)如何对存储的数据进行操作

前人在思索这些问题的过程中总结了一套解决方式,称之为数据结构。.NET平台封装好了一些常用的数据结构,称之为集合类,简称“集合”。

案例演示

下面以客户排队演示数组和与集合的使用。

首先我们创建一个控制台应用程序,然后添加一个Customer类,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JiHe
{
    public class Customer
    {
        //定义一个无参的构造方法
        public Customer() { }
        //定义一个有参数的构造方法
        public Customer(string name, int age, string address)
        {
            Name = name;
            Age = age;
            Address = address;
        }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }
    }
}

接着在Program中来调用构造方法:使用数组来存储对象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JiHe
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建两个Customer对象并实例化
            Customer customer_1 = new Customer("张三",18,"北京");
            Customer customer_2 = new Customer("李四", 19, "上海"); 
            Customer customer_3 = new Customer("王五", 20, "深圳");
            //创建一个Customer类型的数组
            Customer[] list = new Customer[2]; //数组长度为2
            //数组下标是从0开始的
            list[0] = customer_1;
            list[1] = customer_2;  
            list[2] = customer_3;
            Console.WriteLine("排队等待的客户有:");
            for (int i = 0; i < list.Length; i++)
            {
                Console.WriteLine("{0}号:{1}",i+1,list[i].Name);
            }
        }
    }
}

此时运行结果如图所示,
在这里插入图片描述
由于数组长度只有2,但是我们添加了3个对象到数组里面去,所以报错。

因此,当存储一系列对象时,我们就要使用功能更为强大的集合。

使用集合来存储对象:使用集合类,需要导入System.Collections命名空间

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JiHe
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建两个Customer对象并实例化
            Customer customer_1 = new Customer("张三",18,"北京");
            Customer customer_2 = new Customer("李四", 19, "上海");
            Customer customer_3 = new Customer("王五", 20, "深圳");
            //创建一个集合对象
            ArrayList list = new ArrayList();       
            list.Add(customer_1);
            list.Add(customer_2);
            list.Add(customer_3);
            Console.WriteLine("排队等待的客户有:");
            //集合类的Count属性用于获取存储对象的个数
            for (int i = 0; i < list.Count; i++)
            {
                //获取集合中对象必须进行类型转换,将list转换为Customer类型
                Console.WriteLine("{0}号:{1}",i+1,((Customer)list[i]).Name)       
            }
        }
    }
}

运行结果如图所示,成功运行:

在这里插入图片描述

通过这个案例,可以发现,集合相对于数组,最大的优势就是长度可以变化,按需分配。而数组呢,它的长度比较固定。所以当我们在程序中存储一些对象时,建议大家使用集合。

集合的主要特征与类型

C#中的集合表示可以通过遍历方式来访问一组对象,其主要特征如下:

(1)动态地改变大小

(2)可存储任意类型的对象

(3)提供一系列操作集合中对象的方法

C#中的集合提供了一套性能优良、使用方便的类和接口。C#中的集合被定义在System.Collections命名空间中,如ArrayList(数据列表)、Hashtable(字典)、Queue(队列)、Stack(栈)和SortedList(排序列表)等。

集合说明
List可以像数组一样按索引访问列表,但提供了其他方法来搜索和排序
Queue先入先出数据结构,提供了方法将数据项添加到队列的一段,从另一端删除项,以及只检查不删除
Stack先入后出数据结构,提供了方法将数据压入栈顶,从栈顶出栈,以及只检查栈顶的项而不删除
LinkedList双向有序列表,为任何一端的插入和删除进行了优化,这种集合既可作为队列,也可作为栈,还支持列表那样的随机访问
HashSet无序值列表,为快速数据获取而优化,提供了面向集合的方法来判断它容纳的项是不是另一个HashSet 对象中的项的子集,以及计算不同HashSet 对象的交集和并集
Dictionary字典集合允许根据键而不是索引来获取值
SortedList键/值对的有序列表,键必须实现Icomparable接口
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值