黑马程序员技术交流社区

标题: ArrayList、LinkedList和Vector之间的疑问 [打印本页]

作者: 黄坚声    时间: 2012-5-11 17:01
标题: ArrayList、LinkedList和Vector之间的疑问
ArrayList、LinkedList和Vector有什么不一样的吗?在什么时候选择用哪个最好呢?
作者: 田林    时间: 2012-5-11 17:11
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据,以便增加和插入元素。两者都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以索引数据快插入数据慢。Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差一些。
LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,所以索引数据比较慢。但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!


作者: 杨鹏    时间: 2012-5-11 17:15
ArrayList、LinkedList和Vector三者都实现了List接口,三者的异同如下:
(1)ArrayList的底层采用数组的数据结构,查询速度快。
(2)LinkedList的底层采用链表的数据结构,增加和删除速度快。
(3)Vector除了其线程同步以外,其它的功能和ArrayList基本上是一样的,但因为其方法是同步的,所以效率会低一些。
至于选用哪一个,那就要根据具体需求。如果注重查询速度,那就用ArrayList,如果经常对集合进行增删操作就用LinkedList,如果注册线程安全就用Vector。但是这都不是绝对的。主要是了解各个集合的特点,使用的时候酌情考虑就行了。

作者: 黑马张立国    时间: 2012-5-11 17:48
ArrayList、LinkedList和Vector三者都实现了List接口
verctor是同步的,底层是同过数组来实现的,效率低,Enumeration迭代器是它独有的(而 Iterator和Enumeration其实是一样的,但由于名字长,而被iterator取代(在基础上又加了移除操作))。
arraylist (底层数组)是不同步,效率高,由于内存分布连续的,查询速度快。
LinkedList(底层链表)是不同步,效率高,由于内存不连续的,增加和删除高效。
这三个同时具有Iterator,listIterator迭代器

作者: 于陈    时间: 2012-5-11 18:00
这个前面都说的很好了....
ArrayList是不同步的,效率高,也就是线程不安全的(也就是不支持多个线程同时访问),是数组结构,只能向后添加元素,当最开始分配的空间不足的时候自动增加50%的内存空间。
LinkedList也是不同步,效率高,线程不安全,是链表结构,可以向前添加元素,也可以向后添加元素。
Verctor是同步的,线程安全的(当同时有几个数据访问它的时候会自动的为线程排队,前一个访问完了后一个才能访问),但是理所当然他的效率低,也是数组结构,当最开始分配的空间不足的时候自动增加100%的内存空间。
综上所述:当你这个程序是服务器的时候,那么就必须要用Vector。当程序没有多线程访问的时候,那就可以在ArrayList ,LinkedList之间选。至于要用数组结构或者链表结构就看具体需求了。




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