黑马程序员技术交流社区

标题: 集合区别 [打印本页]

作者: 李红飞    时间: 2012-5-23 08:58
标题: 集合区别
Vector、ArrayList、ArrayLinked 类的作用是什么?它们有什么差别?
作者: 胥江    时间: 2012-5-23 09:03
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,因此必须捕获该异常。
作者: 王章亚    时间: 2012-5-23 09:29
一、List与ArrayList的差别
     List->AbstractList->ArrayList
     ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程平安的,而ArrayList和HashMap并不是线程保险的。因为同步需要破费机器时间,所以Vector和HashTable的履行效率要低于ArrayList和HashMap。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
List接口
  List是有序的Collection,应用此接口可能准确的把持每个元素插入的位置。用户可以使用索引(元素在List中的地位,相似于数组下标)来拜访List中的元素,这类似于Java的数组。
和下面要提到的Set不同,List许可有雷同的元素。
  除了存在Collection接口必备的iterator()方法外,房事持久液,List还供给一个listIterator()办法,返回一个ListIterator接口,冯巩的风趣,跟尺度的Iterator接口比拟,ListIterator多了一些add()之类的方法,容许增加,删除,设定元素,还能向前或向后遍历。
  实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。
ArrayList类
  ArrayList实现了可变大小的数组。它允许所有元素,包含null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为摊派的常数,家庭保健,添加n个元素需要O(n)的时间。其余的方法运行时间为线性。
  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可跟着一直增添新元素而主动增长,然而增加算法并没有定义。当须要插入大批元素时,在插入前能够调用ensureCapacity方法来增添ArrayList的容量以进步插入效力。
  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
Map接口
  请留神,Map没有继续Collection接口,Map提供key到value的映射。一个Map中不能包括相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
HashMap类
  HashMap和Hashtable类似,不同之处在于HashMap长短同步的,并且答应null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时光开销和HashMap的容量成比例。因而,如果迭代操作的性能相称主要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
---------------
作者: 黑马张健    时间: 2012-5-23 09:34
首先,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加上一个同步锁即可。





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