黑马程序员技术交流社区

标题: ArrayList,LinkedList和Vector这三者的区别 [打印本页]

作者: nanfp    时间: 2015-7-4 17:55
标题: ArrayList,LinkedList和Vector这三者的区别
本帖最后由 nanfp 于 2015-7-6 08:14 编辑

学到集合这一块,不太清楚ArrayList,LinkedList和Vector这三者的区别,请大神给讲解一下!!
作者: keto    时间: 2015-7-4 21:11
java.util.ArrayList类:
        Collection(接口)
                  |--List(接口):特点:1.有序的;2.可以存储重复元素;
                          |--ArrayList:
                                  1.数组实现:
                                  2.线程不安全,效率高;
                          |--Vector:
                                  1.数组实现:
                                  2.线程安全,效率低;
                          |--LinkedList:
                                  1.链表:
                                  2.线程不安全的,效率高;
作者: mls123456    时间: 2015-7-6 01:11
ArrayList底层实际上是采用数组实现的(并且该数组的类型的Object类型的)
如果jdk6,采用Array.copyOf()方法来生成一个新的数组,如果是jdk5,采用的是System.arraycopy()方法(当添加的数据量大于数组的长度时候)
List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象

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

对于ArrayList,查询速度很快,增加和删除(非最后一个节点)操作非常慢(本质上由数组的特性决定的)
对于LinkedList,查询速度非常慢,增加和删除操作非常快(本质上是由双向循环链表决定的)
你仔细看看
作者: icichacici    时间: 2015-7-6 07:21
这三者都实现了List 接口.所有使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率。 ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组. LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList. 当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义. Vector 和ArrayList类似,但属于强同步类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。 Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
作者: EnderDBluse    时间: 2015-7-6 09:42
前两者的存储结构不同 ArrayList用的是数组结构,每个数据都有对应的角标,LinkedList用的是链式结构,ArrayList查找较快,存储较慢,LinkedList相反,Vector相当于是ArrayList的前辈结构相同 但是线程是同步的,有安全隐患




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2