在我的一个类(class)中,我有一个像这样的方法:
public void setArray(int size){
myArray = new int[size] //myArray is declared already
}
现在,如果我调用它并传入 500,如下所示:
setArray(500);
然后,稍后在我的应用程序中,我只需要一个包含 50 个元素的数组,此时,我只需再次调用它并传入 50 作为我的参数。
这个数组在我的应用程序中被多次引用,我想知道 CG 是否会收集旧的数组?
我知道我真的应该使用 arrayList,不幸的是,这将是一项重大任务,因为我的代码现在有数千行和 18 个类的大小(所以我想我已经为下一个项目学习了!)
arrayList 是如何在“幕后”实现这一点的?我可以模拟 arrayList 行为吗?它只是像我一样创建一个新数组吗?
最佳答案
您正在描述dynamic array的行为。
实现此数据结构的最简单方法是在数组已满或低于某个阈值(例如,仅占用 1/4 的单元格)时创建一个新数组,并将现有值复制到新数组中。
如果你想知道它在 java 中是如何完成的,以及正在进行哪些优化 - 你可能想看看 ArrayList
class source .
关于java - 减少数组的大小(通过创建新数组) - arrayList 是如何做到的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063706/