Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调整ArrayList的大小 我来自C++背景,我想有一个< /p>矩阵 ArrayList<arrayList<E>> javamatrix ArrayList javamatrix 在C++中,我只做< /P> std::vector<std::vector<T> > cppmatrix; std::vector<T>vcol(cols); cppmatrix.resize(rows,vcol); std::向量矩阵; 标准:向量醇(cols); 调整大小(行,vcol);_Java_Matrix_Arraylist - Fatal编程技术网

如何调整ArrayList的大小 我来自C++背景,我想有一个< /p>矩阵 ArrayList<arrayList<E>> javamatrix ArrayList javamatrix 在C++中,我只做< /P> std::vector<std::vector<T> > cppmatrix; std::vector<T>vcol(cols); cppmatrix.resize(rows,vcol); std::向量矩阵; 标准:向量醇(cols); 调整大小(行,vcol);

如何调整ArrayList的大小 我来自C++背景,我想有一个< /p>矩阵 ArrayList<arrayList<E>> javamatrix ArrayList javamatrix 在C++中,我只做< /P> std::vector<std::vector<T> > cppmatrix; std::vector<T>vcol(cols); cppmatrix.resize(rows,vcol); std::向量矩阵; 标准:向量醇(cols); 调整大小(行,vcol);,java,matrix,arraylist,Java,Matrix,Arraylist,我似乎找不到用于此任务的ArrayLists的内置resize()函数,因此我应该使用其他集合吗?除了使用带有javamatrix.add()的for循环之外,没有其他方法可以做到这一点 另外,我希望它在构造函数中以其大小初始化,因为在我编辑元素或添加或删除之前可能会查询该大小。您不需要调整ArrayList的大小。最初传入的大小只是其起始大小。如果您尝试添加超出其当前大小的项目,它将自动调整大小 从: 每个ArrayList实例都有一个容量。容量是用于存储列表中元素的数组的大小。它始终至少与

我似乎找不到用于此任务的
ArrayLists
的内置
resize()
函数,因此我应该使用其他集合吗?除了使用带有
javamatrix.add()的for循环之外,没有其他方法可以做到这一点



另外,我希望它在构造函数中以其大小初始化,因为在我编辑元素或添加或删除之前可能会查询该大小。

您不需要调整ArrayList的大小。最初传入的大小只是其起始大小。如果您尝试添加超出其当前大小的项目,它将自动调整大小

从:

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


没有自动构造和添加元素的
resize
等价物。你必须自己做这件事。但是,它相当于vector的
保留
。它将确保您有空间,但不会更改实际大小。

大多数情况下,不需要执行“resize()”操作,因为(a)ArrayList在添加元素时自动调整大小,以及(b)不清楚您将在ArrayList中存储哪些值,例如,“null”不是很有用。例如,在您的情况下,您可能需要一个循环来创建MatrixCell对象

对于那些想知道如何调整ArrayList的大小使其变小的读者来说,这让我感到困惑,为什么ArrayList设计时没有“resize()”方法。也许是因为新手程序员可能看到了这种方法,但没有意识到ArrayList会自动调整大小

在Java中,此习惯用法用于减小ArrayList的大小:


这是因为“subList”返回一个由原始ArrayList支持的列表,因此“clear()”对原始“ArrayList”进行操作。

我知道这个问题已经很老了,但是这个链接可能会有所帮助,代码会添加“Null”值以调整当前大小

您可以使用ensureSize,而不是单纯使用EnsuRescapity

public static void ensureSize(ArrayList<?> list, int size) {

    list.ensureCapacity(size);
    while (list.size() < size) {
        list.add(null);
    }
}
publicstaticvoid调整大小(ArrayList列表,int-size){
列表。保证能力(大小);
while(list.size()
为什么需要调整它的大小?ArrayList会在需要时自动展开。在不相关的注释中,我可以发誓,STL向量也会随着您向其上推送更多数据而自动调整大小。@Arkain我理解您的意思,但当您遇到保留数据结构时,您需要在放置需要放置在特定索引上的元素之前,首先指定数组的大小。如果您想稍微放置一个对象,您可能需要调整大小远远超出数组的末尾,并用默认对象填充间隙。不过,我想Java选择的内存/对象语义是不可能的。resize()方法的另一个用例是,如果您想删除某个索引之外的所有项。当然,您可以在循环中使用remove(),但resize()更方便,可能更优化。当您有可扩展的查找表时,需要调整大小。例如,到目前为止,索引最多有30个,索引为250个。这是一个非常糟糕的答案,声称“不需要调整大小”。有很多理由需要调整大小。例如,您需要一个大小为
n
的数组,并且希望能够随机访问该数组。如果不首先调整它的大小,使其成为
n
,你就不能执行
arr.get(some_index)
arr.set(some_index,obj)
@icando我想你是在考虑稀疏数组,我同意在这种情况下,“resize()”会很有用,尽管如果它真的稀疏,映射可能会更好。如果您确实希望填充数组中的所有单元格,则需要将每个条目初始化为某个有效引用,在这种情况下,您仍然需要一个循环。您还可以像这样扩展集合:
Collection.addAll(Collections.nCopies(n,defaultElement))可能没有循环那么优雅,但是works@Tim库珀:稀疏数组在哪些方面不如地图?我一直认为稀疏数组是一个映射,但是它有一个具体的本机索引而不是一个整数索引。我不确定稠密且难以捉摸的“list.subList(n,list.size()).clear()”习惯用法确实优于“while(list.size()>size)list.remove(list.size()-1)”。您也可以简单地使用list.addAll(Collections.nCopies(size,null));
public static void ensureSize(ArrayList<?> list, int size) {

    list.ensureCapacity(size);
    while (list.size() < size) {
        list.add(null);
    }
}