A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 nanfp 于 2015-7-6 08:14 编辑

学到集合这一块,不太清楚ArrayList,LinkedList和Vector这三者的区别,请大神给讲解一下!!

4 个回复

正序浏览
前两者的存储结构不同 ArrayList用的是数组结构,每个数据都有对应的角标,LinkedList用的是链式结构,ArrayList查找较快,存储较慢,LinkedList相反,Vector相当于是ArrayList的前辈结构相同 但是线程是同步的,有安全隐患
回复 使用道具 举报
这三者都实现了List 接口.所有使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率。 ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组. LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList. 当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义. Vector 和ArrayList类似,但属于强同步类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。 Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
回复 使用道具 举报
ArrayList底层实际上是采用数组实现的(并且该数组的类型的Object类型的)
如果jdk6,采用Array.copyOf()方法来生成一个新的数组,如果是jdk5,采用的是System.arraycopy()方法(当添加的数据量大于数组的长度时候)
List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象

ArrayList、Vector底层都是采用数组实现的
对于ArrayList,方法都不是同步的,对于Vector,大部分public方法都是同步的
LinkedList采用双向循环链表

对于ArrayList,查询速度很快,增加和删除(非最后一个节点)操作非常慢(本质上由数组的特性决定的)
对于LinkedList,查询速度非常慢,增加和删除操作非常快(本质上是由双向循环链表决定的)
你仔细看看
回复 使用道具 举报
java.util.ArrayList类:
        Collection(接口)
                  |--List(接口):特点:1.有序的;2.可以存储重复元素;
                          |--ArrayList:
                                  1.数组实现:
                                  2.线程不安全,效率高;
                          |--Vector:
                                  1.数组实现:
                                  2.线程安全,效率低;
                          |--LinkedList:
                                  1.链表:
                                  2.线程不安全的,效率高;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马