我刚才有一个谷歌无法解决的简单问题。因此,如果我将ArrayList
的某些元素设置为null
,它们是否仍会计入list.size()
,其余元素的索引是否仍然保持不变?
如果没有,你们是否可以建议我如何做到这一点?
答案 0 :(得分:5)
是的,请查看add()
方法实现,例如:
public boolean add(E object) {
Object[] a = array;
int s = size;
if (s == a.length) {
Object[] newArray = new Object[s +
(s < (MIN_CAPACITY_INCREMENT / 2) ?
MIN_CAPACITY_INCREMENT : s >> 1)];
System.arraycopy(a, 0, newArray, 0, s);
array = a = newArray;
}
a[s] = object;
size = s + 1;
modCount++;
return true;
}
由于ArrayList.size()
只返回size
变量的值,很明显,如果添加null
,则大小会增加1,所以,是的,{{1}算了。
答案 1 :(得分:2)
是和是,您可以使用这个简单的代码进行验证
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add("" + i);
}
System.out.println(list.size() + " " + list);
list.set(0, null);
System.out.println(list.size() + " " + list);
}
10 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10 [null, 1, 2, 3, 4, 5, 6, 7, 8, 9]
答案 2 :(得分:1)
是的,null元素仍将以列表大小计算,其余元素的索引将保持不变。
答案 3 :(得分:0)
您可以删除列表中的所有元素
MyList.removeAll(Collections.singleton(null));
MyList.size();
参考:http://www.mhaller.de/archives/12-How-to-remove-all-null-elements-from-a-Collection.html
答案 4 :(得分:0)
从测试代码或读取源代码推断类行为是一个坏主意,这也是因为ArrayList不是最终的,并且您获得的类可能是具有不同实现的ArrayList的扩展版本。
只需阅读List和ArrayList合约,这些合约必须在扩展类中维护:
有序集合(也称为序列)。 ... 一些列表实现对它们可能包含的元素有限制。例如,某些实现禁止使用null元素,而某些实现对其元素类型进行限制。
List接口的可调整大小数组实现。实现所有可选的列表操作,并允许所有元素,包括null 。
合同说ArrayList允许使用null元素,因此您的问题答案是肯定的,列表大小和索引保持不变。