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

Java中包含null对象和其他对象的Arraylist的大小是多少?,java,arraylist,Java,Arraylist,我有一个ArrayList,它包含一些对象和一些null元素 //Inside for loop private void addPhone(ArrayList<PhoneBean > phoneBeanList,Member member) { if ("A".equalsIgnoreCase(member.getStatus())) { PhoneBean phoneBean = new PhoneBean (); phoneBean .

我有一个
ArrayList
,它包含一些对象和一些
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);

    } 
}
似乎
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);

    } 
}
//内部for循环
私有void addPhone(ArrayList phoneBeanList,成员){
if(“A”.equalsIgnoreCase(member.getStatus())){
PhoneBean=newPhoneBean();
setPhNum(“12345”);
添加(phoneBean);
}否则{
phoneBeanList.add(空);
} 
}
addPhone()
运行两次时,我希望
phoneBeanList
大小返回2,而不是1。 这是因为
null
不影响
ArrayList
大小吗


如果状态不是
A
,知道我需要更改/添加什么吗?

您可以将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
    }
}
/*任何包*/
导入java.util.*;
导入java.lang.*;
导入java.io.*;
/*只有当类是公共的时,类的名称才必须是“Main”*/
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
列表项=新建ArrayList();
items.add(空);
项目。添加(“测试”);
System.out.println(“项目大小:+Items.size());
//印刷品2
}
}
试试看

是否因为“null”不影响ArrayList的大小

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

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

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

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

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

当addPhone()运行2次时,一次为成员状态“A”,另一次为“D”,我希望phoneBeanList大小返回2,而不是1

从您的方法签名
addPhone()

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

如果不是这样,可能还有其他原因没有显示在代码中

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

运行代码,然后执行phoneBeanList.size(),它会告诉您。更好的是,编写一个单元测试。@Matthias Huttar我已经完成了,phoneBeanList.size()也完成了返回1,即使它包含一个phoneBean对象和一个nullobject@Bidisha您确定吗?您的方法的编写方式将添加
phoneBean
或null,而不是两者都添加。在调用
addPhone()之前,您是否正在执行任何其他操作
second time?是否会共享您的部分代码?@rodnuk Yes…实际上,我正在使用api从数据库中获取成员行,它可以包含多个HomePh类型或Workph类型的电话行…因此,对于每种电话类型,都会调用此方法并填充phoneBeanList是的,这是我的想法…但我的手机不会发生这种情况如果条件运行并在下一次填充,则编写一次代码,否则将运行填充null。。当我尝试从循环外部获取size()时,它是1,而不是12@Bidisha看看我的解决方案。谢谢大家。我的API没有得到“A”以外的行。请考虑这个问题解决了。