如何清空一个ArrayList?

12

我在ThisClass中有以下代码:

static ArrayList<MyClass> classlist; 

如果我打电话:

ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);

然后再次调用这条线:

ThisClass.classlist = new ArrayList<MyClass>();

这会重置 ThisClass.classlist 列表,也就是说,classlist列表将不再包含对象吗?


1
当然可以!你还期待什么呢? - agim
你所说的是ArrayLists而不是arrays。如果没有对Arraylist的其他引用,它将被垃圾回收。 - MrSmith42
是的,你说得对,它是一个ArrayList而不是数组。 - Jake
2
你也可以调用 .clear() 方法。我建议使用此方法而不是将 ArrayList 设置为新数组,因为这样可以更清楚地表明你的目标,即使这两种方法的结果相同。http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#clear() - Jazzepi
3个回答

33

这里有一个示例:

代码 1:创建 ArrayList 并添加对象

ThisClass.classlist = new ArrayList<MyClass>();
ThisClass.classlist.add(object);

转换为如下结果:

在这里输入图像描述

代码2:通过重新初始化进行重置

ThisClass.classlist = new ArrayList<MyClass>();

这导致变量指向一个新的对象,从而重置了它:

图片描述

代码 3:通过清空对象进行重置

要使变量“不再包含对象”,应该执行以下操作:

ThisClass.classlist.clear();

Clear方法会遍历所有元素并将它们设置为null。实际上,ArrayList内部也指向其对象的内存地址,但为了简单起见,当您调用此方法时,可以认为它们被“删除”了。

enter image description here

代码4:重置整个类列表

如果您想让它“不再包含ArrayList”,那么您可以这样做:

ThisClass.classlist = null;

这意味着:

enter image description here

此外,请注意您的问题标题提到了“静态ArrayList”。在这个上下文中,static不重要。无论对象是否是静态的,您的问题的结果都将是相同的。


6

调用

ThisClass.classlist = new ArrayList<MyClass>();

will会清空ThisClass.classlist数组(实际上,它会创建一个新的ArrayList并将其放置在旧的位置)。

话虽如此,更好的做法是使用:

ThisClass.classlist.clear();

这是一种更加明确的方法:在代码中展示你真正想要实现的目标,表明你的真实意图,从而让你的代码更易读/易维护。


2

正确。

技术上讲,你并没有“清空”ArrayList,而是实例化了一个新的空的ArrayList


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接