在C++中,我可以将一个项插入向量中的任意位置,就像下面的代码一样:
std::vector<int> vec(10);
vec.insert(vec.begin()+2,2);
vec.insert(vec.begin()+4,3);
Run Code Online (Sandbox Code Playgroud)
在Java中我不能这样做,我得到一个异常java.lang.ArrayIndexOutOfBoundsException,代码如下:
Vector l5 = new Vector(10);
l5.add(0, 1);
l5.add(1, "Test");
l5.add(3, "test");
Run Code Online (Sandbox Code Playgroud)
这意味着C++设计得更好还是只是Java设计的决定?为什么java使用这种方法?
在C++代码中:
std::vector<int> vec(10);
Run Code Online (Sandbox Code Playgroud)
您正在创建一个大小为10的向量.因此,从0到9的所有索引都是有效的.
在Java代码中:
Vector l5 = new Vector(10);
Run Code Online (Sandbox Code Playgroud)
您正在创建一个初始容量为10 的空向量.这意味着底层数组的大小为10,但向量本身的大小为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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3166 次 |
| 最近记录: |