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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄坚声 中级黑马   /  2012-5-11 17:01  /  1964 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ArrayList、LinkedList和Vector有什么不一样的吗?在什么时候选择用哪个最好呢?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据,以便增加和插入元素。两者都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以索引数据快插入数据慢。Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差一些。
LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,所以索引数据比较慢。但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
ArrayList、LinkedList和Vector三者都实现了List接口
verctor是同步的,底层是同过数组来实现的,效率低,Enumeration迭代器是它独有的(而 Iterator和Enumeration其实是一样的,但由于名字长,而被iterator取代(在基础上又加了移除操作))。
arraylist (底层数组)是不同步,效率高,由于内存分布连续的,查询速度快。
LinkedList(底层链表)是不同步,效率高,由于内存不连续的,增加和删除高效。
这三个同时具有Iterator,listIterator迭代器
回复 使用道具 举报
这个前面都说的很好了....
ArrayList是不同步的,效率高,也就是线程不安全的(也就是不支持多个线程同时访问),是数组结构,只能向后添加元素,当最开始分配的空间不足的时候自动增加50%的内存空间。
LinkedList也是不同步,效率高,线程不安全,是链表结构,可以向前添加元素,也可以向后添加元素。
Verctor是同步的,线程安全的(当同时有几个数据访问它的时候会自动的为线程排队,前一个访问完了后一个才能访问),但是理所当然他的效率低,也是数组结构,当最开始分配的空间不足的时候自动增加100%的内存空间。
综上所述:当你这个程序是服务器的时候,那么就必须要用Vector。当程序没有多线程访问的时候,那就可以在ArrayList ,LinkedList之间选。至于要用数组结构或者链表结构就看具体需求了。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马