ArrayList中的Java null元素

时间:2014-02-24 19:51:35

标签: java arraylist

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

如果没有,你们是否可以建议我如何做到这一点?

5 个答案:

答案 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合约,这些合约必须在扩展类中维护:

List:

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

ArrayList:

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

合同说ArrayList允许使用null元素,因此您的问题答案是肯定的,列表大小和索引保持不变。