是的,你的直觉非常敏锐。这正是 C++ 开发者转 Java 时最容易“踩坑”的地方,因为两者在构造函数参数的定义上完全不同。
简单来说:
vector(n):参数 n 代表 Size(实际大小)。ArrayList(n):参数 n 代表 Capacity(预分配容量)。std::vector)在 C++ 中,当你初始化一个指定大小的 vector 时:
C++
// C++
vector<int> v(10);
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] (默认初始化为0)v[5] 是合法的,值为 0。ArrayList)在 Java 中,同样的参数传进去:
Java
// Java
List<Integer> list = new ArrayList<>(10);