【第22期】观点:IT 行业加班,到底有没有价值?

ArrayList——数组与ArrayList的关系与区别

转载 2016年08月31日 09:29:17
数组([]):最高效;但是其容量固定且无法动态改变;
ArrayList:容量可动态增长;但牺牲效率;
建议:

首先使用数组,无法确定数组大小时才使用ArrayList!


1.效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的1.5倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。


2.类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。
注:jdk5中加入了对泛型的支持,已经可以在使用ArrayList时进行类型检查。
从这一点上看来,ArrayList与数组的区别主要就是由于动态增容的效率问题了
3.ArrayList可以存任何Object,如String,Employee等,但不支持基本数据类型,除非使用wrapper。



数组的大小是固定的,不能在不破坏原有数据的前提下伸缩空间,也就是说数组可以伸缩空间,但是只是在原先的数组上重新实例化,原先的数组的数据将会被清空,通过System.Array.Resize这个泛型方法重置数组的空间大小,而集合却能随意伸缩空间且不破坏原先的数据。


创建数组的时候需要声明元素的类型,而集合类默认类型是Object,可以这样认为,数组是“进去难,出来简单”,而集合是“进去简单,出来难”。打比方我声明了一个Int类型的数组,也就是说这个数组只能存储整数类型的数据,如果我扔一个String类型的进去就报错,也就是不让我存进去,而集合不管是整数型的还是字符串型的全可以往里面扔,因为进去后的数据就会变成Object类型的了,但是取出来的时候必须按照先前存进去的类型进行拆箱,所以比较难,数组读取数据的速度比集合要快。


数组可读可写,却不能声明只读类型的数组,而集合却能通过 ReadOnly这个修饰符来达到只给读取数据,不给写入数据,这样在安全级别上提高了。


数组要有整数下标才能访问特定元素,而集合可以通过下标,也可以通过给定义的名字来访问,所以说作为读取数据的前提下,集合的灵活性比较高,而数组则在有些时候会很麻烦。


举报

相关文章推荐

Array和ArrayList之间的区别

1. Array类型的变量在声明的同时必须进行实例化(至少得初始化数组的大小),而ArrayList可以只是先声明。 2. Array只能存储同构的对象,而ArrayList可以存储异构的对象。 同构...

ArrayList转数组,数组与ArrayList互相转换

首先来说一下数组 与集合的区别: Arraylist为集合的子类,String[] a    为定义了一个String类型的数组, 数组和集合都可以用来表示容纳了相同数据的一个容器 数组的大小是固定的...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

数组、ArrayList、List三者区别

一、 数组 优点:在内存中时连续的,速度较快,操作简单。 缺点:定义数组时要定义其长度,不是很灵活,过长过短都会造成问题。不方便进行数据的添加、插入和移除。 例如:int [] i=new in...

Java中Array与ArrayList的主要区别

1)精辟阐述: 可以将 ArrayList想象成一种“会自动扩增容量的Array”。 2)Array([]):最高效;但是其容量固定且无法动态改变;      ArrayList:  容量可...

数组(Array)和列表(ArrayList) LinkedList 有什么区别?

数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用 Array 而不是ArrayList ? 下面列出了 Array 和 ArrayList 的不同点:Array 可以包含基本...

Array, ArrayList, LinkedList之间的区别分析

(一)Array(数组类) Java中最基本的数据结构,提供动态创建和访问java数组的方法,根据定义的Array类型,其中的元素与类型必须相同。Array是一个固定大小的容器,底层采用的是线性连续...

解析C#中[],List,Array,ArrayList的区别及应用

[] 是针对特定类型、固定长度的。List 是针对特定类型、任意长度的。Array 是针对任意类型、固定长度的。ArrayList 是针对任意类型、任意长度的。Array 和 ArrayList 是通...

Java中List和ArrayList的区别

List是一个接口,而ListArray是一个类。  ListArray继承并实现了List。  所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造。...

C#中数组、ArrayList和List三者的区别

在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。 数组     数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元...

ArrayList与数组

ArrayList作用: 众所周知,一旦确定了数组的大小,改变它就不容易了。不过ArrayList类就可以解决动态更改数组大小的问题。ArrayList使用起来有点像数组,但是在添加和删除元素时,具有...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)