Java 中的 ArrayList 与 Vectors,如果线程安全不是问题

2022-09-01 12:34:57

的性能和 之间真的有那么大的区别吗?当线程安全不是问题时,始终使用ArrayLists是一种好习惯吗?VectorArrayList


答案 1

Vector 起源于预收集 API 时代,此后经过改造,成为其中的一部分。根据我所读到的内容,它没有被弃用的原因是因为核心API依赖于它。

ArrayList是作为集合API的一部分从头开始编写的,因此应该使用,除非您需要支持Java版本到1.2。

如果需要线程安全的 ArrayList,可以使用静态工厂方法来生成列表。Collections.synchronizedList(new ArrayList<type>);


答案 2

如果线程安全不是问题,则速度会更快,因为它不必同步。但是,您应该始终将变量声明为 a,以便以后可以根据需要更改实现。ArrayListList

我更喜欢显式处理同步,因为很多操作需要多次调用。例如:

if (!myList.isEmpty()) { 
    myList.get(0);
}

应该是:

synchronized (myList) {
   if (!myList.isEmpty()) { 
       myList.get(0);
   }
}

推荐