12.6 C#基础

一、ArrayList和List的主要区别

ArrayList → 不带泛型,数据类型丢失,需要装箱拆箱

List → 带泛型,数据类型不丢失,不需要装箱拆箱

ArrayList:

命名空间:System.Collections

ArrayList存在不安全类型,会把所有数据都当做Object来处理,装箱拆箱操作费时。

IList是接口,ArrayList是一个实现了该接口的类,可以被实例化。

ArrayList对象的大小是按照其中存储的数据来动态扩充与收缩的,所以在声明时不需要指定它的长度。

泛型List:

命名空间:System.Collections.Generic

因为ArrayList存在不安全类型与装箱拆箱的缺点,所以出现了泛型的概念。List类是ArrayList的泛型等效类,用法相似,List类也继承了IList接口。区别在于声明List集合是,需要为其声明List集合内数据的对象类型。

名词解释

装箱:在值类型向引用类型转换时发生;

拆箱:在引用类型向值类型转换时发生;

值类型:直接将内存存储在栈内,由系统自动释放资源的数据类型;

引用类型:由类型的实际值引用(类似于指针)表示的数据类型,通俗点说就是在编程时需要new出来的变量类型都是引用型,引用类型是存放在内存的堆中;

栈:由大至小的分配,先进后出,直接存放值类型的地方;我们一般出现的内存溢出就是由于栈位都分配完了;

堆:由小至大的分配,随意存储,存放引用类型的地方;
 

代码案例:
public void ArrayListDemo()
{
  ArrayList list = new ArrayList();
  list.Add(1);
  list.Add(2);
  
  foreach(int i in list)
  {
    Console.WriteLine("value is {0}", i);
  }
}

Add(1)装箱,Add(2)装箱,foreach(int i in list) 拆箱+拆箱,输出为string装箱+装箱,共4装2拆。

public void ListDemo()
{
  List<int>list = new List<int>();
  list.Add(1);
  list.Add(2);
 
  foreach(int i in list)
  {
    Console.WriteLine("value is {0}", i);
  }
}

Add无装拆,foreach(int i in list)无装拆,输出为string装箱+装箱,共2装0拆。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值