黑马程序员技术交流社区
标题:
集合区别
[打印本页]
作者:
李红飞
时间:
2012-5-23 09:01
标题:
集合区别
Vector、ArrayList、ArrayLinked 类的作用是什么?它们有什么差别?
作者:
黑马张健
时间:
2012-5-23 09:35
首先,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加上一个同步锁即可。
作者:
张成龙
时间:
2012-5-23 09:59
ArrayList:底层是的数据结构是数组结构。特点:查询速度很快,但是增删稍慢。 线程不同步。
LinkedList:底层是的数据结构是链表结构。特点:增删速度很快,查询速度慢。
Vector:底层是数组数据结构。 线程同步。被ArrayList替代了。
作者:
范家鹏
时间:
2012-5-23 10:49
集合都是存放对象的容器,作用都是存放对象方便操作对象。
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 11:00
|--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。
作者:
黄克帅
时间:
2012-5-23 11:14
Vector 是线程安全的。当需要增长时默认增长为原来的一倍,最底层是通过数组来实现,查询快,增删改慢
ArrayList 线程不安全 ,当需要增长时默认为原来的一半,最底层通过数组来实现,查询快,增删改慢
LinkedList 线程不安全 底层通过双向链表实现 查询慢,增删改快 。 另外LinkedList还提供了额外的get,remove,insert方法。
作者:
胡团乐
时间:
2012-5-23 20:14
Vector、ArrayList、ArrayLinked 类的作用是什么?它们有什么差别?
简单总结下
vector是线程同步安全的 其他两个是不安全的 他是个老集合 里面有个枚举方法 是vector独有的
ArrayList 相对于ArrayLinked 查询速度快 如果不进行大量添加 删除的话
而ArrayLinked 是进行大量添加删除的话相对ArrayList 速度比较快
如果只是添加查询比较频繁建议使用ArrayList比较方便
vector是个老程序员经常使用的集合 如果不是特别需要(比如要使用到枚举)建议一般不使用
作者:
付左军
时间:
2012-5-23 22:51
vector线程安全,速度慢,被ArrayList代替了
作者:
付左军
时间:
2012-5-23 22:52
vector线程安全,速度慢,被ArrayList代替了,
ArrayList线程不安全,但是查询速度快
Linklist,链表结构的,增删速度快
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2