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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李红飞 中级黑马   /  2012-5-23 09:01  /  1961 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Vector、ArrayList、ArrayLinked 类的作用是什么?它们有什么差别?

8 个回复

倒序浏览
首先,ArrayList、LinkedList、Vector都实现了List接口。(List接口继承了Collection接口)
区别:
1.版本:Vector集合是在JDK1.0的时候出现的。     ArrayList、LinkedList集合是在JDK1.2的时候出现的。
2.数据结构:LinkedList底层用的是链表结构。      ArrayList、Vector:底层用的是数组数据结构。
3.线程方面:LinkedList没有同步方法。   ArrayList是线程不安全的,它的方法之间是线程不同步的。。   Vector是线程安全的,他的方法之间线程是同步的。
4.存储特点:ArrayList与Vector都有一个初始容量,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间。
             ArrayList每次增长为原来的0.5倍。Vector每次增长为原来的一倍。
5.操作效率:ArrayList:查询速度快,但是增删稍慢。    LinkedList:增删速度快,查询比较慢。   Vector:增删查都慢。
            一般建议不使用Vector.尽量使用ArrayList.如果需要线程同步,就把ArrayList加上一个同步锁即可。
回复 使用道具 举报
ArrayList:底层是的数据结构是数组结构。特点:查询速度很快,但是增删稍慢。        线程不同步。
LinkedList:底层是的数据结构是链表结构。特点:增删速度很快,查询速度慢。
Vector:底层是数组数据结构。        线程同步。被ArrayList替代了。
回复 使用道具 举报
集合都是存放对象的容器,作用都是存放对象方便操作对象。
LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));

ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

Vector类
Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
回复 使用道具 举报
  |--List:元素是有序的,元素可以重复,因为该集合体系有索引。
       |--ArrayList;底层的数据结构是数组。特点:查询速度很快,但是增删稍慢线程不同不
       |--LinkedList:底层使用数据结构是链表。特点:增删速度很快,查询稍慢。
       |--Vector:底层数据结构是数组。特点:线程同步,被ArrayList取代



List:
    特有方法,凡是可以操作角标的方法都是该体系特有的方法。


   add(index,element);
   addAll(index,Collection);

   remove(index);

   set(index,element);

   get(index);
   subList(from,to);
   listIterator();
   int indexOf(obj)获取指定元素的位置
   ListIterator listIterator();  


List集合特有的迭代器。ListIterator 是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合的元素。因为会发生ConcurrentModificationException异常

所以在迭代时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator.
该接口只能通过List集合的ListIterator方法获得

LinkedList:特有方法
addFirst();
addLast();

getFirst();
getLast();
获取元素,但是不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

在JDK1.6出现了代替方法:
offerFirst();
offerLast();

peekFirst();
peekLast();
获取元素,但是不删除元素。如果集合中没有元素,返回null。

pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,返回null。
回复 使用道具 举报
Vector 是线程安全的。当需要增长时默认增长为原来的一倍,最底层是通过数组来实现,查询快,增删改慢
ArrayList  线程不安全 ,当需要增长时默认为原来的一半,最底层通过数组来实现,查询快,增删改慢
LinkedList 线程不安全   底层通过双向链表实现 查询慢,增删改快 。 另外LinkedList还提供了额外的get,remove,insert方法。
回复 使用道具 举报
Vector、ArrayList、ArrayLinked 类的作用是什么?它们有什么差别?
简单总结下
vector是线程同步安全的 其他两个是不安全的 他是个老集合 里面有个枚举方法 是vector独有的
ArrayList 相对于ArrayLinked 查询速度快 如果不进行大量添加 删除的话
而ArrayLinked 是进行大量添加删除的话相对ArrayList 速度比较快
如果只是添加查询比较频繁建议使用ArrayList比较方便
vector是个老程序员经常使用的集合 如果不是特别需要(比如要使用到枚举)建议一般不使用
回复 使用道具 举报
vector线程安全,速度慢,被ArrayList代替了
回复 使用道具 举报
vector线程安全,速度慢,被ArrayList代替了,
ArrayList线程不安全,但是查询速度快
Linklist,链表结构的,增删速度快
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马