ArrayList和List

1.ArrayList:

ArrayList的特点:

(1).其数据存储类型是基于数组的,采用顺序结构的存储模式,其操作方式也是基于数组的操作原型进行。

(2).ArrayList为用户直接提供了Add,Insert,Remove等一系列编写起来较为繁琐的函数,使其具有面向对象的特点,便于编程。

(3).ArrayList是一种相对自由的数据结构,其元素不一定需要同一类型,可以选择插入不同类型的元素来进行操作。

 

ArrayList常见的使用实例:

 1 public static void TestArrayList(ArrayList arrayList)
 2         {
 3             arrayList.Add(1);//在末端添加元素
 4             arrayList.Add(1);
 5             arrayList.Add("hello");//可添加不同元素
 6             arrayList.Insert(0, 123 + "abc");//在指定位置添加元素
 7             arrayList.Remove(1);//去除第一个为1的元素(只去除1次)
 8             arrayList.RemoveAt(0);//在指定位置添加元素 
 9             arrayList.AddRange(arrayList);//将另一个同一类型的数据结构插入到尾部
10         }

 

ArrayList的缺点:

(1).所有储存的数据都将其转换为了object这一父类(解释了为什么可以插入任意类型的数据)

(2).存在类型不安全问题,因为都被转为了object类,所以就导致了之前的类型函数无法正常调用的问题,所以我们经常要将其再次转为原类型进行处理。

(3).需要频繁进行装箱和拆箱的操作,导致其效率低下。

 

补充:装箱和拆箱:

1.装箱

(1).子类隐式转换为父类的过程。

(2).值类型转为引用类型的过程。(具体为:在栈空间开辟一个存储这些值类型地址的地址码的空间,并对应这个地址码的地址在堆中分配空间存入值类型中的数据)

2.拆箱

(1).父类显示转换为子类的过程

(2).被转为引用类型的值类型重新恢复的过程。(即将栈中存储地址的空间清楚,并将在堆中存储的数据重新存回到栈中)

分析以下代码:

1 public static void Main()
2         {
3             Int32 v = 5;
4             Object o = v;
5             v = 123;
6 
7             Console.WriteLine(v + "," + (Int32)o);
8         }

代码拆装箱解析:

(1).第4行Int32类型被装箱成为object类型,执行了一次装箱操作。

(2).第7行中,第一个v作为Int32类型被转为了String(引用)类型,执行一次装箱操作。

   o做为Object类型被转为了Int32类型,执行了一次拆箱操作。

  o被转为Int32类型后,又要再转为String类型,执行一次装箱操作。

总结:以上代码共执行了3次装箱操作和1次拆箱操作

 

为了克服以上的问题缺点,引入了更加规范合理的一种数据结构类型:List

 

 

2.List:

List的特点:

(1).其定义时,一定要有<数据类型(如:int,也可以是自己定义的类型)>,这也就说明其不能存入任意的数据类型,也不会点存入的数据类型做转换。

(2).其他的一些操作函数和ArrayList十分类似,且底层原理也是相同的。

(3).可以通过索引来为元素赋值或修改。(但一定要在范围内,不允许越界)

 

List常见使用实例:

 1  public static void TestArrayList()
 2         {
 3             List<int> list = new List<int> { 1, 2, 3, 4 };//可以对List直接进行初始化赋值
 4             list.Add(1);
 5             list.Insert(0, 123);
 6             list.Remove(1);
 7             list.RemoveAt(0);
 8             list.AddRange(list);
 9             list.Clear();//清空数组中的所有元素
10         }

总结:List即数组的升级版,使用泛型来确定存储的数据类型,避免了数据不匹配和各种数据转化的风险。

posted @ 2022-03-09 19:58  jue1e0  阅读(61)  评论(0)    收藏  举报