包含null对象和Java中其他Object的Arraylist的大小是多少?

时间:2016-03-21 18:14:36

标签: java arraylist

我有ArrayList,其中包含一些对象以及一些null元素。

似乎null没有占用任何空间,返回的数组大小只是该对象占用的数据大小,并没有考虑到' null'元件。

//Inside for loop 
private void addPhone(ArrayList<PhoneBean > phoneBeanList,Member member) {
    if ("A".equalsIgnoreCase(member.getStatus())) {
        PhoneBean phoneBean = new PhoneBean ();
        phoneBean .setPhNum("12345");
        phoneBeanList.add(phoneBean);   
    }else {
        phoneBeanList.add(null);

    } 
}

addPhone()运行两次时,我希望phoneBeanList大小返回2,而不是1。 是因为nullArrayList尺寸没有贡献吗?

如果状态不是A,我还需要知道如何更改/添加到列表中?

2 个答案:

答案 0 :(得分:2)

您可以将null添加到ArrayList。因此,要回答您的问题,列表的大小为null,另一个对象为2。

/* package whatever; */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        List<Object> items = new ArrayList<>();
        items.add(null);
        items.add("test");
        System.out.println("Items size: " + items.size());
        // Prints 2
    }
}

试试https://ideone.com/WeEtqh

答案 1 :(得分:0)

  

是因为&#34; null&#34;没有贡献ArrayList Size?

我会说不。这不是因为您添加了null

根据ArrayList中.add()方法的实现,没有明确的条件来处理null个对象。因此,即使在列表中添加null,也应该增加数组大小。

事实上,他们唯一要做的就是检查是否需要增加支持数组列表的当前数组。之后,您的null对象将被添加到列表中。

您可以在ArrayList中查看.add()的实现:

public boolean add(E e) {
    ensureCapacityInternal(size + 1); 
    elementData[size++] = e;
    return true;
}
  

当addPhone()运行2次成员状态&#34; A&#34;和其他作为&#34; D&#34;我期待phoneBeanList大小返回2,而不是1

来自addPhone()的方法签名:

private void addPhone(ArrayList<PhoneBean > phoneBeanList,Member member

用户将选择要添加的ArrayList实例。我高度怀疑您向另一个ArrayList实例添加了一个元素,这解释了为什么它将列表大小显示为1。

如果不是这种情况,可能还有其他原因未在您的代码中显示。

  • 您是否在打印前从列表中删除了任何元素?
  • 是否还有其他影响您正在打印的ArrayList的方法?