java数据结构中,啥情况下用Vector,啥情况下用ArrayList呢
Vector是最旧的List实现,现在基本不再使用(好像说方法全部都是同步,有性能损失;部分方法名太长,List的对应实现方法名短些),主要为兼容旧库。一般直接使用ArrayList,需要同步的话可以用Collections类的同步List静态方法来转换为同步List。
■网友
1.楼上说的都在理,其实最主要的原因是实际开发中的需求决定的。2.我先整理一下楼上各位答主的答案:①Vector所有方法都是同步,有性能损失。②Vector早期版本出现的。③Vector初始length是10 超过length时 以100%比率增长,相比于ArrayList更多消耗内存。这些答案分析的都到位,但是这里我更想从实际应用的角度来谈谈:Vector synchronizes on each individual operation. That\u0026#39;s almost never what you want to do.
Generally you want to synchronize a whole sequence of operations. Synchronizing individual operations is both less safe (if you iterate over a Vector, for instance, you still need to take out a lock to avoid anyone else changing the collection at the same time, which would cause a ConcurrentModificationException in the iterating thread) but also slower (why take out a lock repeatedly when once will be enough)?
Of course, it also has the overhead of locking even when you don\u0026#39;t need to.
Vector 把集合的每个操作(增删改查)都加上了锁,而这锁从来都不是必须的。通常的,在实际开发中,我们更多的是通过锁定一系列的操作来实现线程安全的,也就是说将许多需要同步的资源放到一起(比如放到同一个方法或者代码块)来加锁保证线程安全,这样将需要保证线程安全的资源进行规整,一起同时用一把锁。例如: synchronized void test{ a.set(); v.add(person); b.set();// 以上三个操作都需要保证线程安全。}//v代表vector对象如果多个Thread 并发执行该方法,可以得知
明明方法本身已经加锁,已经能够保证线程安全了,所以此处根本不需要vector的自己再进行方法的加锁了。如果这种情况下还要使用vector的话,就会造成锁额外开销。
所以这里更适合ArrayList。
2.如果对集合进行 保证线程安全的遍历的话,Vector自身无法保证遍历安全,也得额外加锁,和ArrayList一样。
总结:Vector会在你不需要进行线程安全的时候,强制给你加锁,导致了额外开销,所以慢慢被弃用了。
这是我的理解,如果哪里不到位,请各位狠心指正,以免误导别人。
【java数据结构中,啥情况下用Vector,啥情况下用ArrayList呢】 题主不明白的话,可以继续追问我。
■网友
95%情况不用vector
■网友
Victor的话 是比较老的… 线程同步 也是可变数组 初始length是10 超过length时 以100%比率增长 length变成20 所以 有时候会浪费Arraylist 线程不同步 其他都一样 但是Arraylist的length是以50%比率增加…10-15,所以效率高
推荐阅读
- 湖北通报扫黑除恶专项斗争典型案例办理情况
- 突发情况|
- 河北霸州一家长举报老师后被拘留?警方通报
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 阿里程序员网上招人的情况为何如此多见
- 卫星云图中这种图像是啥情况
- 分享分享你生活中除游戏外,遇到过哪些恨电脑配置不够的情况
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 纯电|新能源车投资产能已过剩?房企恒大、宝能造车情况被重点摸排
- |@连云港人 请检查供水防寒情况 如管道冻坏及时报修
