12

我有以下代码ThisClass

static ArrayList<MyClass> classlist; 

如果我打电话:

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

然后再次调用此行:

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

它会重置ThisClass.classlist列表,即类列表列表将不再包含对象吗?

4

3 回答 3

29

这是一个插图:

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

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

结果如下:

在此处输入图像描述

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

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

结果 - 您通过使其指向一个新对象来重置它:

在此处输入图像描述

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

要使它“不再包含对象”,您应该做的是:

ThisClass.classlist.clear();

Clear 循环遍历所有元素并使它们为null。在内部,ArrayList 也指向其对象的内存地址,但为简单起见,请认为当您调用此方法时它们正在被“删除”。

在此处输入图像描述

代码 4:重置整个班级列表

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

ThisClass.classlist = null;

这意味着:

在此处输入图像描述

另外,请注意您的问题标题提到了“静态 ArrayList”。static在这种情况下并不重要。无论对象是否是静态的,您的问题的结果都是相同的。

于 2013-04-13T18:50:43.927 回答
5

打电话

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

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

话虽这么说,使用起来要好得多:

ThisClass.classlist.clear();

这是一种更清晰的方法:在代码中显示您的真实意图,表明您真正想要完成的工作,从而使您的代码更具可读性/可维护性。

于 2013-04-13T18:49:33.977 回答
2

正确的。

从技术上讲,您并不清楚这样ArrayList做,您实际上实例化了一个新的 empty ArrayList

于 2013-04-13T18:32:40.143 回答