直到今天我还认为ArrayLists在Java和C ++ std :: vectors中相同,但事实证明ArrayLists只能存储对象。 (原始包裹)。我正在寻找的是这样的:
class Array {
int i;
type[] array;
Array() {
this.i = 0;
this.array = new array[1];
}
Array(int initialSize) {
this.i = 0;
this.array = new array[initialSize];
}
type get(int index) {
return array[index];
}
void add(type to_add) {
if(array.length == i) {
type[] newArray = new type[array.length * 2];
for(int j = 0; j < array.length; j++) newArray[j] = array[j];
}
array[i++] = to_add;
}
}
“type”是原始数据类型之一。
注意:我不需要存储对象的能力,所以我不想要ArrayList的内存开销。
如果我的任何假设有误,请告诉我:-D
编辑: 这不是重复,这是关于性能的问题,而不是关于它是否可能。
答案 0 :(得分:4)
标准(Java SE)库不提供与Java基元类型一起使用的C ++ std::vector
clss的等效项。替代方案是:
使用ArrayList
等标准类(例如)Integer
作为类型参数。
使用第三方库。例如,旧的GNU Trove库。 (注意:这不是推荐。这是一个例子。)
使用Java泛型不能也无法实现Trove和类似功能。这是因为Java只允许将引用类型用作泛型类的参数。因此,这些Java库实际上是作为“复制和粘贴”代码实现的,其集合API在很大程度上不是多态的。