ArrayList中的Java空元素

ArrayList中的Java空元素,java,arraylist,Java,Arraylist,我只是有一个谷歌无法解决的简单问题。因此,如果我将ArrayList的某些元素设置为null,它们是否仍会被计入list.size(),并且剩余元素的索引是否仍保持不变 如果没有,你们中有谁能建议我怎么做吗?您可以从列表中删除所有元素 MyList.removeAll(Collections.singleton(null)); MyList.size(); 参考资料:是,请查看add()方法实现,例如: public boolean add(E object) { Object[] a

我只是有一个谷歌无法解决的简单问题。因此,如果我将
ArrayList
的某些元素设置为
null
,它们是否仍会被计入
list.size()
,并且剩余元素的索引是否仍保持不变


如果没有,你们中有谁能建议我怎么做吗?

您可以从列表中删除所有元素

MyList.removeAll(Collections.singleton(null));
MyList.size();

参考资料:

是,请查看
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;
}
公共布尔添加(E对象){
Object[]a=数组;
int s=大小;
如果(s==a.length){
Object[]newArray=新对象+
(s<(最小容量增量/2)?
最小容量(增量:s>>1)];
数组复制(a,0,newArray,0,s);
array=a=newArray;
}
a[s]=对象;
尺寸=s+1;
modCount++;
返回true;
}

由于
ArrayList.size()
只返回
size
变量的值,很明显,如果添加
null
,则大小将增加1,因此,是的,
null
被计数。

是和是,您可以用这个简单的代码验证它

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]
publicstaticvoidmain(字符串[]args){
ArrayList=新建ArrayList();
对于(int i=0;i<10;i++){
列表。添加(“+i”);
}
System.out.println(list.size()+“”+list);
list.set(0,空);
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]

是的,空元素仍将计入列表的大小,剩余元素的索引将保持不变。

从测试代码或读取源代码推断类行为是个坏主意,另外,因为ArrayList不是final,并且您获得的类可能是ArrayList的扩展版本,具有不同的实现

只需阅读List和ArrayList契约,它们必须包含在扩展类中:

有序集合(也称为序列)。。。 一些列表实现对它们可能包含的元素有限制。例如,有些实现禁止空元素,有些实现对其元素的类型有限制

列表接口的可调整大小的数组实现。实现所有可选的列表操作,并允许所有元素,包括null


合同上说ArrayList允许空元素,所以对您的问题的答案是肯定的,列表大小和索引保持不变。

yes和yes。一些测试代码会告诉你:)是的,他们会的。如果您花时间键入几行代码,您自己可能会注意到这一点。您必须手动循环列表以创建一个只有非空条目的新列表。为什么要将列表元素设置为null?!也许我必须被启发,但我看不出有什么用。尝试它会比问这个问题花费更少的时间是的,你可以,尽管这与这个问题没有任何关系。