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这个修饰符来达到只给读取数据,不给写入数据,这样在安全级别上提高了。


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


ArrayList与数组

ArrayList作用: 众所周知,一旦确定了数组的大小,改变它就不容易了。不过ArrayList类就可以解决动态更改数组大小的问题。ArrayList使用起来有点像数组,但是在添加和删除元素时,具有...

数组与ARRAYLIST的关系与区别

一、数组与ArrayList的主要区别:效率、类型识别和primitive type。 数组([]):最高效;但是其容量固定且无法动态改变; ArrayList:容量可动态增长;但...
  • Sindyue
  • Sindyue
  • 2016年04月27日 16:40
  • 183

Array和ArrayList之间的区别

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

Java中Array与ArrayList的主要区别(

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

数组、ArrayList、List三者区别

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

Java中List和ArrayList的区别

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

Java中Array与ArrayList的主要区别

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

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

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

Java如何将数组转换为ArrayList(ArrayList和数组间的相互转换)

参考:http://wanglihu.iteye.com/blog/243238 ArrayList和数组间的相互转换 博客分类:  java Java  ...

数组和集合区别

一、数组声明了它容纳的元素的类型,而集合不声明。        二、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ArrayList——数组与ArrayList的关系与区别
举报原因:
原因补充:

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