您的位置:首页 > 编程语言 > Java开发

Java集合分析:ArrayList、LinkedList、Vector

2017-04-11 20:30 501 查看
简单介绍一下各个类的特点以及它们之间的区别,攒点人品

基本特点:

ArrayList和vector是基于数组实现的,是顺序结构,能很方便的进行随机访问,LinkedList的是基于链接结构实现的,能方便对集合进行添加和删除操作,但不方便进行随机访问。

ArrayList和LinedList是非线程安全的,Vector是线程安全的。

ArrayList解析:

ArrayList是基于数组实现的,

- 长度设置:长度默认为10个长度,当空间容量不足时,采用len=len+(len>>1)增长策略,最大长度为2^31-1

- 扩容策略:扩容时将使用Arrays的拷贝方法,将旧数组中的元素按顺序拷贝到新数组中。

- 遍历操作方式:List提供了Iterator方法对数组元素进行遍历操作,但是Iteator方法只能进行遍历操作和删除操作,不能进行添加和修改操作,ArrayList中提供了另外一种ListIterator的方法,这种方法能进行遍历删除,修改,添加操作,需要注意的是,每个Iterator中有自己的cursor,每次只能对当前操作的cursor位置进行添加操作,修改和删除是对lastReturned进行操作的,这个代表的最近一次返回的元素的位置。

- 简介modCount和exceptionModeCount两个变量:modCount表示对集合的修改次数,只要存在对集合的修改,modCount就会增加,但是exceptionModeCount只存在于Iterator对象中,创建Iterator对象时会将exceptionModeCount设置为modCount的,每次对Iterator进行遍历操作是都会先检查两个变量的值是否相等,当不相等时将会抛出同步异常,原因在于,当对集合对应的Iterator对象进行操作是不允许对集合对象本身进行修改操作,限制了遍历时对集合进行修改。

LinkdeList解析:

是基于链式结构实现的,所以在容量上来说是没有限制的,但是由于容量的变量是int,所以当大于2^31是会发生问题,LinkedList的节点结构是node拥有pre和next两个变量分别指向前节点和下一节点,所以LinkedList是双向链表,在基于索引的操作时会有一点策略,当索引的数值大于len>>1时会从后往前进行遍历,否则从前往后进行遍历

Vector解析:

是基于数组实现的,并且是线程安全的,相对来说性能上比前两个集合有所下降,默认的长度为10,相对于ArrayList来说有一个比较大的不同就是有增长量的策略,你可以指定增长量,当容量不足时有两种策略,当你指定了增长量的值时(>0)则指定增长增长变量值的长度,不然按len=len+len的方式进行扩容,采用ArrayList相同的拷贝方式进行扩容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐