赞
踩
ArrayList、LinkedList和Vector都是实现了List接口。
其中,ArrayList和Vector底层是用数组实现的,因此可以用序号下标来访问他们,查找的效率高,一般数组的大小比要插入的数据大数量要大。
LinkedList的底层使用双向链表实现的,因此插入和删除的效率高。
在多线程并发的时候,ArrayList和LinkedList是非线程安全的,并且是不同步的。Vector的所有方法都用了synchronized方法,是线程安全的,但是vector中的方法组合起来使用不是线程安全的。
例如:
Vector vector = new Vector();
public void put(String element){
if (!vector.contains(element))
vector.add(element);
}
.....
}
我们是要实现在插入后,vector中没有重复的元素。
上面的代码中,虽然contains()和add()都是线程安全的,但是假如有两个线程a,b都要执行add(“”);在a执行了contains后还没有执行add方法,这时线程b执行了contains方法,b发现此时vector中没有重复的元素。因此vector中就会插入了重复的元素了,与我们要实现的功能不一致。因此,我们在组合使用vector中的方法的时候,还是要根据具体情况加上synchronized。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。