java中ArrayList、LinkedList和Vector的区别

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。

你可能感兴趣的:(java基础知识)