ArrayList和Vector之间有哪些区别?

14 浏览
0 Comments

ArrayList和Vector之间有哪些区别?

ArrayList和Vector这两种数据结构之间有什么区别?在什么情况下应该使用它们?

0
0 Comments

ArrayList和Vector之间的区别是什么?

Vector是一个被认为已经过时的类,尽管它被标记为“同步”,但实际上它是不安全的,并且仅被学生和其他缺乏经验的程序员使用。ArrayList是专业人士和有经验的程序员使用的常用列表实现。

专业人士想要一个线程安全的列表实现可以使用CopyOnWriteArrayList。

Vector本来是要保证线程安全的,但它有一个设计缺陷,实际上并不是线程安全的。它基本上是一个被弃用的类。出于某种原因,一些大学等仍然没有听说过这个消息,并继续推荐使用它。

Vector的同步机制实际上是没有用的。它确保多个线程同时更新向量时不会破坏列表的内部。如果你需要同步多个操作,你总是需要显式地同步并执行这些操作。对于ArrayList来说,如果你只同步多个操作而不是单个操作,内部可能会出现问题。CopyOnWriteArrayList只解决了特定的问题,并不能替代所有使用同步列表的情况。不过,我建议使用Collections.synchronizedList(new ArrayList())来替代Vector来实现同步列表。

Collections.synchronizedList()效率低下,并且几乎已经被弃用。根据文档,客户端必须手动在返回的列表上进行同步以安全地进行迭代:尽管是线程安全的,但多个线程不能安全地并发迭代,这使得它成为一种粗暴且无法扩展的解决方案。它的使用已经被java.util.concurrent类取代。

有趣的事实是,Java 1.7的Stack类使用了Vector类。

0
0 Comments

ArrayList和Vector之间的区别在于Vector的访问是同步的,而ArrayList的访问是非同步的。这意味着只有一个线程可以同时调用Vector的方法,并且在获取锁时会有一点开销;如果使用ArrayList,则不会有这种情况发生。一般来说,你应该使用ArrayList;在单线程情况下,它是更好的选择,在多线程情况下,你可以更好地控制锁定。是否允许并发读取?可以。是否要执行一批十个写入的同步操作?也可以。这需要你更加小心,但这很可能是你想要的。还要注意,如果你有一个ArrayList,你可以使用Collections.synchronizedList函数创建一个同步的列表,从而得到与Vector相当的效果。

0
0 Comments

ArrayList和Vector之间的区别是什么?

ArrayList和Vector之间的区别有以下几点:

1. 同步性:Vector是同步的,而ArrayList不是。

2. 数据增长方法:Vector在内部使用数组来保存元素,当需要插入一个元素时,如果内部数组已满,Vector会将数组大小翻倍。而ArrayList会将数组大小增加50%。

如果没有特殊要求,可以使用ArrayList而不是Vector。

如果多个线程同时访问一个ArrayList,那么需要在修改列表的代码块中进行外部同步,以避免并发访问的问题。可以使用Collections.synchronizedList方法在创建列表时进行同步,以避免对列表的意外非同步访问。

对于从ArrayList中读取数据,在多线程环境下是线程安全的,问题主要出现在对ArrayList进行添加、删除或修改操作时。

关于Vector的命名,可能是因为在C++中,ArrayList被称为vector。

参考链接:

- [Java中ArrayList和Vector的区别](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#synchronizedList-java.util.List-)

- [Java多线程](https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html)

- [为什么C++中的ArrayList被称为vector?](https://stackoverflow.com/questions/581426)

0