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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈山 中级黑马   /  2012-11-4 20:28  /  3910 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈山 于 2012-11-20 22:30 编辑

List接口的这三个实现类都各有什么特点,分别在什么样的情况下使用?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

5 个回复

正序浏览
Vector是线程安全的,它的方法之间是线程同步的,arrayList是线程不安全的,方法之间是线程不同步的
一个线程的访问集合用arrayList,因为它不考虑线程安全,效率会高些,多个线程访问集合的话,最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
数据增长Vector增长原来的一倍,ArrayList增加原来的0.5倍。

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性
一、同步性

ArrayList,LinkedList是不同步的,而Vestor是的。所以如果要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低。

二、数据增长
从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
本帖最后由 李计伟 于 2012-11-4 21:07 编辑

ArrayList,LinkedList,Vector 都为List的子类。 元素可重复是有序的。
ArrayList是数组结构,用于查询对象速度快,不是同步的,线程安全性低效率高。
Vector是数组结构,已被ArrayList取代,查询对象速度快,是同步的,线程安全性高效率高低。
LinkedList是链表结构,增删对象快,不是同步的,线程安全性低效率高。
都可以用Iterator 来遍历也可以用各自的get()方法使用for循环来遍历元素.

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1

查看全部评分

回复 使用道具 举报
首先,此三个类的特点如下:
ArrayList:底层数据结构为数组,查询快,增删慢,不是线程同步的,因此效率高。
Vector:底层数据结构为数组,查询快,增删慢,是线程同步的,因此效率低。
LinkedList:底层数据结构为链表,查询慢,增删快,不是线程同步的,因此效率高。
针对以上三个类不同的特点即可确定使用场景:
1、当涉及较多对元素的查询时,使用ArrayList;当涉及较多对数据元素的增删时,使用LinkedList。
2、需要线程同步时,使用Vector.
3、当不能确定时,可选择使用ArrayList。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

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