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。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值