大家好。
我正在制作一个词汇应用程序,我需要在其中创建一个
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));
但它不适用于我的目的。
提前致谢。
答案 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的建议,忽略实施细节,只信任界面。