gpt4 book ai didi

java - 每个新与空的最佳实践

转载 作者:行者123 更新时间:2023-11-29 09:40:47 25 4
gpt4 key购买 nike

我有一个方法,每 5 秒迭代一次大数组。在每个循环中,我向 ArrayList 添加一些内容。

我听说使用 new 会占用更多内存。

我需要知道在 ArrayList 上方清空/清除的最佳方法是什么。

private ArrayList<MyMarker> myArray;

public void callEveryFiveSeconds(){
myArray = new ArrayList<MyMarker>(); //clears previous array data
//grab array data from server
for (int i = 0; i < 200; i++) {
myArray.add(someData);
}
}

private ArrayList<MyMarker> myArray  = new ArrayList<MyMarker>();

public void callEveryFiveSeconds(){
myArray = null; //clears previous array data
//grab array data from server
for (int i = 0; i < 200; i++) {
myArray.add(someData);
}
}

最佳答案

第二个代码错误,会抛出NullPointerException。

如果你想清除列表:

public void callEveryFiveSeconds(){
myArray.clear();
//grab array data from server
for (int i = 0; i < 200; i++) {
myArray.add(someData);
}
}

至于哪个选项更好——创建一个新的 ArrayList 实例或清除现有的实例——后者应该占用更少的内存,因为它不必为新的 数组列表。前者会分配一个带有新数组的新 ArrayList,而旧的 ArrayList 将有资格进行垃圾回收。这意味着第二个选项(清除列表)将为垃圾收集器节省工作,这在性能方面也是一件好事。

如果在每次调用 callEveryFiveSeconds 时添加到列表中的元素数量保持相似,则每次清除现有列表而不是创建新列表还有另一个好处。原因是创建一个新的 ArrayList 而不指定初始容量会创建一个初始容量较小的列表,如果向新列表添加很多元素,则需要多次调整大小,这也需要时间。

关于java - 每个新与空的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27897731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com