如何清除数组列表对象java

ttcibm8c  于 2022-12-28  发布在  Java
关注(0)|答案(2)|浏览(143)

我是java新手,所以这是java初学者遇到的问题。
我知道,一旦一个对象不再使用,就将其保持打开状态是不好的做法,但是我找不到一个ArrayList的例子:我看过的教程让它打开,我找不到任何东西,除了清除它删除所有项目。
我正在寻找与此等价的:

import java.util.Scanner;

Scanner sc = new Scanner(System.in);
String userInput = sc.nextLine();
sc.close();

但是对于数组列表对象:

import java.util.ArrayList;

ArrayList<String> countries = new ArrayList<String>();
countries.add("Spain");
countries.add("China");
System.out.println(countries);
//And then something like
countries.close();

它只是ArrayList<Object>.clear()吗?但这不会删除对象?谢谢

e1xvtsh3

e1xvtsh31#

使用.clear()将从列表中删除所有项,但看起来您想告诉垃圾收集器删除对象,据我所知,没有办法做到这一点,但是也不必担心删除对象,如果您的代码停止使用它们,垃圾收集器将简单地自动从内存中删除它们。

hfsqlsce

hfsqlsce2#

我知道,一旦对象不再使用,就将其保持打开状态是不好的做法,但是我找不到ArrayList的这种示例...
让对象“打开”并不是一般(a)的“坏习惯”。
如果对象具有关联的非堆资源,则无法关闭对象可能会导致问题。最常见的示例如下:

  • 具有关联文件描述符的对象;例如SocketFileInputStreamFileOuputStream
  • 具有到外部服务的关联“连接”的对象;例如JDBC ConnectionStatementResultSet对象。
  • 具有关联的堆外存储的对象;例如BufferedImage

然而,大多数Java对象 * 不 * 有这个问题,你 * 不 * 需要“关闭”它们,事实上,大多数对象没有close()dispose()方法。
ArrayList是典型的,没有必要“关闭”或“清理”ArrayList,只需要让垃圾收集器来清理即可。
在例外情况下,清理List对象 * 可能 * 是明智的;例如,这样你就可以重用它。如果你需要这样做,调用clear()方法。
但是,这通常不是一个好主意,在ArrayList的情况下,调用clear()可能会导致一些二阶性能问题:
1.清除列表需要接触所有列表单元格,这会消耗CPU时间。

  1. clear()方法不会调整ArrayList后备数组的大小,所以一个变大的回收列表将继续拥有一个大的后备数组......永远......如果你继续回收它的话。
    1.在大多数Java GC中,一个Java对象在经历了很多GC周期后,会被提升到“旧”代。当这种情况发生时,关联GC的成本会增加。例如,当你将一个新对象的引用赋给一个旧对象(比如我们的列表),这会导致新对象(可能还有附近的对象)在下一个新的空间收集中没有被收集;即延长了其寿命。
    简而言之,clear()可能对性能不利。
    小心好的/最好的/坏的实践建议。很多建议都是“万金油”。即使在最好的时候,大多数这样的建议也不是普遍适用的。喜欢回复所谓的“最佳实践”建议(或提供建议!)的人应该读一读这篇文章:

相关问题