vag*_*erg 6 java null android list arraylist
大家好.我正在制作一个词汇表App,我需要在其中创建一个
List<String>(或ArrayList).为此,我创建了以下代码片段(仅作为示例):
List<String> tempSOLUTION = new ArrayList<String>();
String temp = "abc123";
tempSOLUTION.add(temp);
Run Code Online (Sandbox Code Playgroud)
我也尝试过以下方法:
tempSOLUTION.add(new String(temp));
Run Code Online (Sandbox Code Playgroud)
他们都将项添加到列表中,但在调试时,我发现它的数组有12个对象,如下所示:
[abc123, null, null, null, null, null, null, null, null, null, null, null]
Run Code Online (Sandbox Code Playgroud)
我的问题是我不能拥有那些空项,因为这个新列表是a上的键HashableMap<String>,所以任何更改都会导致异常,因为键不存在.
使用调试器的列表(tempSOLUTION)详细信息的屏幕截图:http://www.pabloarteaga.es/stackoverflow.jpg
如何在不创建所有空项的情况下将项添加到列表中?
搜索完成后,我找到了如何删除这些空项的答案,即:
tempSOLUTION.removeAll(Collections.singleton(null));
Run Code Online (Sandbox Code Playgroud)
但它不适用于我的目的.
提前致谢.
Oli*_*rth 14
您可能正在使用调试器查看其内部数组.那没关系; 它只是一个实现细节.
重要的是通过其公共API可见的内容.换句话说,什么叫size()(等等)告诉你.(如果1在你的代码示例中没有返回,那么会发生一些奇怪的事情!)
从截图中可以清楚地知道究竟是什么
[abc123, null, null, null, null, null, null, null, null, null, null, null]
Run Code Online (Sandbox Code Playgroud)
不是它ArrayList本身,而是它的成员变量objectData恰好是它的内部缓冲区ArrayList(它实际上存储了你添加到它的元素).
这个缓冲区的大小比实际大小大,ArrayList因为否则,每次添加一个新元素时,整个objectData都应该重新分配为一个更大的数组并复制所有元素,但这肯定是昂贵的.
按照Oli的建议,忽略实现细节,只信任接口.