ArrayList自动添加空项

时间:2013-08-25 23:44:15

标签: java android list arraylist null


大家好。 我正在制作一个词汇应用程序,我需要在其中创建一个 List<String>(或ArrayList)。为此,我创建了以下代码片段(仅作为示例):

List<String> tempSOLUTION = new ArrayList<String>();
String temp = "abc123";
tempSOLUTION.add(temp);

我也尝试了以下内容:

tempSOLUTION.add(new String(temp));

他们都将项目添加到列表中,但在调试时,我发现它的数组有12个对象,如下所示:

[abc123, null, null, null, null, null, null, null, null, null, null, null]

我的问题是我不能拥有这些空项,因为这个新列表是HashableMap<String>上的键,所以任何更改都会导致异常,因为密钥不存在。

使用调试器的列表(tempSOLUTION)详细信息的屏幕截图:http://www.pabloarteaga.es/stackoverflow.jpg

如何在不创建所有空项目的情况下将项目添加到列表中?

搜索完成后,我找到了如何删除这些空项的答案,即:

tempSOLUTION.removeAll(Collections.singleton(null));

但它不适用于我的目的。

提前致谢。

2 个答案:

答案 0 :(得分:14)

您可能正在使用调试器查看其内部数组。那没关系;它只是一个实现细节。

重要的是通过其公共API可见的内容。换句话说,对size()(等等)的调用会告诉您。 (如果在你的代码示例中没有返回1,那么会发生一些奇怪的事情!)

答案 1 :(得分:6)

从截图中可以清楚地知道究竟是什么

[abc123, null, null, null, null, null, null, null, null, null, null, null]

不是ArrayList本身,而是其成员变量objectData,它恰好是ArrayList的内部缓冲区(它实际上存储了你添加到它的元素)。

此缓冲区的大小大于ArrayList的实际大小,否则,每次添加新元素时,应将整个objectData重新分配为更大的数组并复制所有元素,但这肯定很贵。

按照Oli的建议,忽略实施细节,只信任界面。