Java集合分析:ArrayList、LinkedList、Vector
2017-04-11 20:30
501 查看
简单介绍一下各个类的特点以及它们之间的区别,攒点人品
ArrayList和LinedList是非线程安全的,Vector是线程安全的。
- 长度设置:长度默认为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对象进行操作是不允许对集合对象本身进行修改操作,限制了遍历时对集合进行修改。
基本特点:
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集合】ArrayList、LinkedList、Vector分析
- java(20130801)异常、集合、ArrayList和LinkedList的比较、Vector和ArrayList的异同
- Java ArrayList、LinkedList和Vector的使用及性能分析
- java基础之集合List-ArrayList、LinkedList、Vector的差别
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
- Java基础之集合List-ArrayList、LinkedList、Vector的底层实现和区别
- Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比)
- Java集合源码学习笔记(五)ArrayList,LinkedList,Vector和Hashtable,HashMap的比较
- (9) java ---- 集合框架图 ArrayList,LinkedList,Vector各自的性能特点及区别
- Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比)
- Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合深入学习--ArrayList,LinkedList和Vector
- java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)
- java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)
- JAVA学习---集合系列---ArrayList、Vector和LinkedList等的差别