java arraylist有任何类似c++vector capacity()的函数,或者机制不同
java arraylist has any function like c++ vector capacity() or the mechanism is different?
如下所示,我可以得到t(实际为0)中的元素数量,但我不知道倾覆t的实际大小。在c++中,capacity()可以返回100。
// in Java
ArrayList<Integer> t = new ArrayList<Integer>(100);
System.out.println(t.size()); // 0
// in C++
vector<int> t;
t.reserve(100);
std::cout << t.size() << std::endl; // 0
std::cout << t.capacity() << std::endl; // 100
如何在Java中获得t的容量?
您无法获取这些信息(无需反思),但您可以执行与容量有关的某些操作。
- 如果您想确保一定的容量(例如,这样接下来的100个插入就不会在中间触发调整大小),您可以使用
ensureCapacity(int)
- 另一方面,如果您想减少容量(为了节省内存,可能会以新阵列分配和在元素上复制为代价),可以使用
trimToSize
这两个函数都在ArrayList
上声明,而不是在List
上声明,因此您的变量必须专门为此类型(就像您在代码中所做的那样)。
不,Java没有一个方法可以告诉ArrayList
的容量。这类信息被视为实现细节,客户端代码不必担心。ArrayList
可以根据自己的需要自由管理其底层阵列。事实上,从设计的角度来看,通常最好简单地使用List
,或者在某些情况下使用RandomAccessList
,而不是尝试使用特定的实现。
请注意,ArrayList
有两种方法可用于向其告知客户的意图:ensureCapacity(int)
告诉列表它应该准备好至少容纳那么多项目,trimToSize()
告诉"列表不需要其他成员,它应该将数组缩小到只够容纳当前项目。
相关文章:
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 我想了解为什么在这个例子中使用引用函数?或者引用在c++函数中的重要性
- 从作为模板参数传递给构造函数的类继承,或者从它们继承
- Android JNI RegisterNatives:对所有内容调用一次,或者每个函数调用一次
- 如何析构单例实例,或者为什么以下代码适用于析构函数?
- 调用虚函数的逻辑不清楚(或者是方法隐藏?
- 使用递归模板函数是否会引入函数调用开销,或者编译器是否大部分时间都内联它(下面的示例)?
- 多态性是否适用于值?或者在按(基)值返回时使用派生类的移动构造函数
- 不是多态类型,或者为什么我们在这里需要虚拟析构函数?
- C ,DO函数知道先前计算的函数值,或者必须重新计算它们
- 在这个真正允许的函数中,或者我们有未定义的行为
- C++函数不是具有shared_ptr的类的成员,或者为什么我的变量未声明
- 堆栈内存是如何工作的,或者函数变量是如何在堆栈上分配和访问的
- C++释放传递给函数中参数的内存,或者将其留给调用方
- java arraylist有任何类似c++vector capacity()的函数,或者机制不同
- 我有一个C++2d数组,我必须调用函数.它只对每5个位置进行平均,例如[0][0]+[5][0]这看起来是否正确,或者有
- 如何派生模板函数?或者这个场景的首选方法是什么
- 实现std::变量转换构造函数-或者:如何从参数包中找到从任何T到Ti的所有转换的第一个重载
- 构造 函数?或者别的什么