java - std::vector 和 java.util.Vector 之间的差异

标签 java c++

在 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/

相关文章:

c++ - 我们在 C++ 中使用 "inherit"构造函数吗? "inheriting"的确切定义是什么

Java 替换全部

java - 如何检查 url 是否已使用且 24 小时后无效?

python - 等价于 Python 中的 C++ union

c++ - 如何在 Linux 集群上构建用于 C++ 的 BLAS 和 LAPACK?

C++ 线程 - 在循环中生成一个对象(类)?

java - 如何在java中检查网络类型?(使用IP地址)

java - Intellij 构建与 Maven 构建不同

java - 使用 Thymeleaf 从 Spring Boot 中的 Jar/war 文件访问 HTML/JavaScript 文件

c++ - macdeployqt 不复制插件