数组:string[] a=new string[2]
a[0]="1";
a[1]="3"
从上可看出数组在内存中连续存储,索引速度比较快,赋值和修改比较简单。
缺点:数组大小不明确容易造成浪费和超出索引内存溢出。
arraylist
大小不需要指明,对象的大小是按照其中存储的数据来动态扩充与收缩的
ArrayList list1 = new ArrayList();
//新增数据
list1.Add("cde");
list1.Add(5678);
//修改数据
list[2] = 34;
//移除数据
list.RemoveAt(0);
//插入数据
list.Insert(0, "qwe");
由上可见,
//新增数据
list1.Add("cde");
list1.Add(5678);
//修改数据
list[2] = 34;
//移除数据
list.RemoveAt(0);
//插入数据
list.Insert(0, "qwe");
由上可见,
arraylist的插入要简单得多
缺点:它不是类型安全的,在存储或检索数据时会引发装箱和拆箱操作,性能消耗。
数组临界点的扩容是相当消耗性能的。
list
List<string> list = new List<string>();
//新增数据
list.Add(“abc”);
//修改数据
list[0] = “def”;
//移除数据
list.RemoveAt(0);
//新增数据
list.Add(“abc”);
//修改数据
list[0] = “def”;
//移除数据
list.RemoveAt(0);
array和arraylist的区别?
1. Array类型的变量在声明的同时必须进行实例化(至少得初始化数组的大小),而ArrayList可以只是先声明
int[] arr = new int[3]{1,2,3};
int[] arr2 = new int[3];
ArrayList myList = new ArrayList();
2.Array只能存储同构的对象,而ArrayList可以存储异构的对象
3.在CLR托管堆中的存放方式 Array是始终是连续存放的,而ArrayList的存放不一定连续
4. Array对象的初始化必须只定指定大小,且创建后的数组大小是固定的,而ArrayList的大小可以动态指定,其大小可以在初始化时指定,也可以不指定,
int[] arr = new int[3]{1,2,3};
int[] arr2 = new int[3];
ArrayList myList = new ArrayList();
2.Array只能存储同构的对象,而ArrayList可以存储异构的对象
3.在CLR托管堆中的存放方式 Array是始终是连续存放的,而ArrayList的存放不一定连续
4. Array对象的初始化必须只定指定大小,且创建后的数组大小是固定的,而ArrayList的大小可以动态指定,其大小可以在初始化时指定,也可以不指定,
也就是说该对象的空间可以任意增加
5 Array不能够随意添加和删除其中的项,而ArrayList可以在任意位置插入和删除项
相同点1.两者都可以枚举2.两者都可以通过index得到或修改对应值3.他们创建的对象都在托管堆中
5 Array不能够随意添加和删除其中的项,而ArrayList可以在任意位置插入和删除项
相同点1.两者都可以枚举2.两者都可以通过index得到或修改对应值3.他们创建的对象都在托管堆中
建议:
基于效率和类型安全,使用array
无法确定数组大小,使用arraylist
list和arraylist的区别?
list是一个接口,arraylist是一个类,arraylist继承并实现了list。
所以list不能被构造List list=new List(); // 是错误的用法
泛型的出现解决了arraylist中类型不安全和装箱拆箱引起的性能消耗问题。