在 C++ 中,我可以将一个项目插入 vector 中的任意位置,就像下面的代码一样:
std::vector<int> vec(10);
vec.insert(vec.begin()+2,2);
vec.insert(vec.begin()+4,3);
在 Java 中我不能这样做,我得到一个异常 java.lang.ArrayIndexOutOfBoundsException,代码如下:
Vector l5 = new Vector(10);
l5.add(0, 1);
l5.add(1, "Test");
l5.add(3, "test");
这意味着 C++ 设计得更好还是只是 Java 的设计决策? 为什么 java 使用这种方法?
最佳答案
在 C++ 代码中:
std::vector<int> vec(10);
您正在创建一个大小为 10 的 vector 。所以从 0 到 9 的所有索引之后都是有效的。
在 Java 代码中:
Vector l5 = new Vector(10);
您正在创建一个初始容量为 10 的空 vector 。这意味着底层数组的大小为 10,但 vector 本身的大小为 0。
这并不意味着一个比另一个设计得更好。 API 只是不同,这并不是使一个比另一个更好的区别。
请注意,在 Java 中现在优先使用 ArrayList
,它具有几乎相同的 API,但不同步。如果您想在 Java 的 Vector 中找到一个糟糕的设计决策,那么每个操作的同步可能就是一个。
因此,在 Java 中编写等效于 C++ 初始化代码的最佳方法是:
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++){
list.add(new Integer());
}
关于java - std::vector 和 java.util.Vector 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120944/