如何调整ArrayList的大小

Ism*_*ush 16 java arraylist matrix

我来自C++背景,我希望有一个矩阵

ArrayList<arrayList<E>> javamatrix 
Run Code Online (Sandbox Code Playgroud)

在C++中我会这样做

std::vector<std::vector<T> > cppmatrix;
std::vector<T>vcol(cols);
cppmatrix.resize(rows,vcol);
Run Code Online (Sandbox Code Playgroud)

我似乎无法为此任务找到内置resize()函数ArrayLists,所以我应该使用另一个集合吗?除了使用for循环外,没办法做到这一点javamatrix.add()吗?


PS我想在构造函数中初始化它的大小,因为在编辑元素或添加或删除之前可能会查询该大小.

Mat*_*hen 16

没有resize相应的自动构造和添加元素.你必须自己做.但是,ensureCapacity相当于矢量reserve.它将确保您有空间,但不会改变实际尺寸.


Dav*_*and 8

您不应该调整arraylists的大小.您最初传入的大小只是它的起始大小.如果您尝试添加超出当前大小的项目,它将自动调整大小.

文档:

每个ArrayList实例都有一个容量.容量是用于存储列表中元素的数组的大小.它始终至少与列表大小一样大.当元素添加到ArrayList时,其容量会自动增加.除了添加元素具有恒定的摊销时间成本这一事实之外,未指定增长策略的详细信息.

  • 如果要将对象放在数组末尾之外,并且使用默认对象填充间隙,则可能需要调整大小.我想虽然Java选择的内存/对象语义不太可能. (8认同)
  • resize()方法的另一个用例是,如果要删除超出特定索引的所有项目.当然你可以使用remove()进行循环,但resize()更方便,可能更优. (4认同)