数组、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就会报错,且不能通过编译。这样就避免了前面讲的类型安全问题与装箱拆箱的性能问题了。
- php添加到数组的用法(详解PHP 7.4 中数组延展操作符语法知识点)
- js编写一个数组去重的方法(JS实现数组过滤从简单到多条件筛选)
- javascript构造重复数组(JavaScript平铺数组转树形结构的实现示例)
- ajax 向后台传递数组参数
- python查找含特定字符的字符串(Python实现查找字符串数组最长公共前缀示例)
- php数组取值方法(php给数组赋值的实例方法)
- python数据分析删除重复值(Python3实现从排序数组中删除重复项算法分析)
- laravel数据返回格式(laravel 关联关系遍历数组的例子)
- laravel查询条件数组写法(解决Laravel 使用insert插入数据,字段created_at为0000的问题)
- python函数调用传递数组数据(python调用c++传递数组的实例)
- python数组矩阵操作(Python矩阵和Numpy数组的那些事儿)
- python用指针合并两个有序数组(Python3实现计算两个数组的交集算法示例)
- javascript中求二维数组最小值(javascript实现数组最大值和最小值的6种方法)
- php数组是怎么实现的(PHP里的$_GET数组介绍)
- 数组reduce方法的好处(JS使用reduce方法处理树形结构数据)
- javascript数组实例扩展方法(JavaScript如何监测数组的变化)
- 每周一首古诗 《绝句》(每周一首古诗绝句)
- 蓝色代表什么(蓝色代表什么性格的人)
- 红色代表什么(红色代表什么情感和含义)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
热门推荐
- nginx的请求处理(nginx处理http请求实现过程解析)
- css3水平移动效果(利用css3 translate完美实现表头固定效果)
- 怎么使用阿里云cdn(阿里云CDN加速和全站加速DCDN区别及如何选择)
- ftp服务器可以用吗(FTP服务器存在的风险你知道吗?)
- php目录使用教程学习(PHP FileSystem 文件系统常用api整理总结)
- 如何获取存储过程返回值
- innodb和myisam(Mysql InnoDB和MyISAM区别原理解析)
- MYSQL字符集设置的方法详解(终端的字符集)(MYSQL字符集设置的方法详解终端的字符集)
- dockerjenkins最新消息(新手必看docker安装jenkins详细教程)
- sqlserver基础数据类型(SQL Server中T-SQL 数据类型转换详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9