数组、ArrayList和List的区别
数组、ArrayList和List的区别
数组、ArrayList和List的区别一、数组
1、数组在内存中是连续存储的,所以它的索引速度是非常的快,赋值与修改元素也很简单,但是在数组的两个数据间插入数据也是很麻烦的
2、在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。
3、如果在声明数组时我们并不清楚数组的长度,就变的很棘手了。
4、数组定义时要写明类型,是字符串还是整形
例如
string[] s=new string[3];
//赋值
s[0]="a";
s[1]="b";
s[2]="c";
//修改
s[1]="b1";
二、ArrayList
1、ArrayList就是动态数组,可以动态的增加和减少元素。它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。
2、ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除.
3、可以存放任何类型的变量
4、ArrayList存在不安全类型与装箱拆箱
例如
ArrayList list = new ArrayList();
//新增数据
list.Add("abc");
list.Add(123);
//修改数据
list[2] = 345;
//移除数据
list.RemoveAt(0);
//插入数据
list.Insert(0, "hello world");
在上例list中,我们不仅插入了字符串"abc",而且又插入了数字123。这样在ArrayList中插入不同类型的数据是允许的。因为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。
5、ArrayList与数组转换
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));
ArrayList List = new ArrayList();
List.Add( “string” );
List.Add( 1 );
//往数组中添加不同类型的元素
object[] values = List.ToArray(typeof(object)); //正确
string[] values = (string[])List.ToArray(typeof(string)); //错误
和数组不一样,因为可以转换为Object数组,所以往ArrayList里面添加不同类型的元素是不会出错的,但是当调用ArrayList方法的时候,要么传递所有元素都可以正确转型的类型或者Object类型,否则将会抛出无法转型的异常。
三、List
List类是ArrayList类的泛型等效类。它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。
例如
List<int> list = new List<int>();
//新增数据
list.Add(123);
//修改数据
list[0] = 345;
//移除数据
list.RemoveAt(0);
上例中,如果我们往List集合中插入string字符"hello world",IDE就会报错,且不能通过编译。这样就避免了前面讲的类型安全问题与装箱拆箱的性能问题了。
- python查找含特定字符的字符串(Python实现查找字符串数组最长公共前缀示例)
- 数组、ArrayList和List的区别
- JavaScript中使用concat合并数组
- ajax 向后台传递数组参数
- php数组写法(php文件操作之文件写入字符串、数组的方法分析)
- js数组排序有哪些(js将多维数组转为一维数组后去重排序)
- vue改数组和对象值(vue $set 实现给数组集合对象赋值)
- javascript中定义数组的方法(JavaScript中数组sort方法的基本使用与踩坑记录)
- python 二维数组怎么取第二列(python实现二维数组的对角线遍历)
- php的数组是如何实现的(PHP中遍历数组的三种常用方法实例分析)
- php返回数组值最大的键(PHP实现通过二维数组键值获取一维键名操作示例)
- js数组去重的十种方法(JavaScript常用数组去重实战源码)
- react怎么绑定state(react纯函数组件setState更新页面不刷新的解决)
- php添加到数组的用法(详解PHP 7.4 中数组延展操作符语法知识点)
- php数组实例说明(PHP检测一个数组有没有定义的方法步骤)
- python删除数据框重复变量(Python3删除排序数组中重复项的方法分析)
- 中秋节买啤酒,预算超过7元试试这8种啤酒,麦香浓郁都是真啤酒(预算超过7元试试这8种啤酒)
- CellPress旗下的6 期刊,国人友刊来了解一下吧(CellPress旗下的6期刊国人友刊来了解一下吧)
- ()
- SCI检索 SSCI检索 EI检索 ISTP检索 CSCD检索简介(SCI检索SSCI检索EI检索)
- 参考文献里期刊名称的写法,你知道吗(参考文献里期刊名称的写法)
- 硕博期刊 SCI SSCI CSSCI分不清 一文带你看懂主流期刊分类(硕博期刊SCISSCI)
热门推荐
- 织梦dedecms自定义表单选项必填修改解决方法(织梦dedecms自定义表单选项必填修改解决方法)
- python中if语句应学会什么(Python基础之条件控制操作示例if语句)
- jsonkeyvalue怎么取(替换json对象中的key最佳方案)
- css绝对布局和相对布局(如何理解 CSS 布局和块级格式上下文)
- docker快速入门和安装(docker安装tomcat8的实现方法)
- css3支持多重背景吗(真正了解CSS3背景下的@font face规则)
- dedecms操作(织梦DedeCMS官方关于正版版本号的严正声明)
- python ssh 连接(python pexpect ssh 远程登录服务器的方法)
- dedecms导航条调用(dede调用其他栏目的文章或者缩略图列表且有分页效果的方法)
- Visual Studio中 sln 和 suo 文件
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9