java arraylist有任何类似c++vector capacity()的函数,或者机制不同

java arraylist has any function like c++ vector capacity() or the mechanism is different?

本文关键字:函数 或者 机制 arraylist 任何类 capacity c++vector java      更新时间:2023-10-16

如下所示,我可以得到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()告诉"列表不需要其他成员,它应该将数组缩小到只够容纳当前项目。

相关文章: