java - 单线程应用程序中的 ArrayList 与 Vector 性能

标签 java vector arraylist collections

我只是在寻找为什么 ArrayList 比 Vector 快的问题的答案,我发现 ArrayList 更快,因为它没有同步。 所以我的疑问是:

  1. 如果 ArrayList 不是同步的,我们为什么要在多线程环境中使用它并与 Vector 进行比较。

  2. 如果我们处于单线程环境中,那么 Vector 的性能会如何降低,因为我们在处理单线程时没有进行同步。

为什么我们要考虑以上几点来比较性能?

请指导我:)

最佳答案

  1. a) 在多线程程序中使用 ArrayList 的方法可能是同步的。

    X 类 {

    List l = new ArrayList();
    
    synchronized void add(Object e) {
        l.add(e);
    }
    ...
    

    b) 我们可以使用 ArrayList 而无需将其暴露给其他线程,这是仅从局部变量引用 ArrayList 的情况

    无效 x() { 列表 l = new ArrayList();//除了current之外没有其他线程可以访问l ...

  2. 即使在单线程环境中进入同步方法需要锁定,这也是我们失去性能的地方

    public synchronized boolean add(E e) { // current thread will take a lock here
        modCount++;
    

    ...

关于java - 单线程应用程序中的 ArrayList 与 Vector 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30908470/

相关文章:

java - 在构造函数中用套接字填充ArrayList?

android - 从数据库填充 ListView

java - 如何设置通知的标题和内容?

java - 使用@PersistenceContext(type=PersistenceContextType.EXTENDED) 时避免一级缓存问题

python - 除以矩阵的向量列

Haskell如何打印可变向量

java - 尝试将开放处理代码转换为pj.5s

java - 正则表达式拒绝 '_'

java - 不了解 Android Mediaplayer 同步

C++如何使用坐标 vector 查找正方形或矩形的面积