数组中的Java null行为

时间:2013-12-21 15:55:02

标签: java arrays

说我有一个类类型,我必须声明一个数组来存储这种类型。 E.g:

MyType[] t = new MyType[5]

这意味着我分配5个单元格来存储MyType项目。在我的程序中,假设我添加了2个MyType项(动态)

t[0] = new MyType(..);
t[1] = new MyType(..);

如果我想知道实际填充了多少项,

int count=0;
for(int j =0; j<t.length ; j++){
   if ( t[j] != null ){
      ++count;
   }
}

测试null是否正确?因为我似乎无法增加计数。 count始终为0.另外,length()显示数组的大小为5.是否有一些方法可以显示实际填充项的数量?感谢

2 个答案:

答案 0 :(得分:1)

首先,数组上没有.length()方法。这是您可以访问的属性

for(int j =0; j<t.length ; j++){
   if ( t[j] != null ){
      ++count;
   }
}

至于这是否是唯一的方式,我认为是。您可以找到像Apache Commons Collections这样的实用程序,但它们最终仍会做同样的事情:迭代数组并检查每个项目。

这是因为您使用的术语filled实际上与数组无关,而是仅将第n个元素从对null的引用更改为对其他内容的引用。更糟糕的是,具有5个空元素的数组和具有5个非空元素的数组都是长度为5。

如果这是一种获取可变大小数组的方法,其中长度是您添加的内容的数量,那么您可能需要考虑ArrayList

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

你可以这样使用它:

List<MyType> t = new ArrayList<MyType>(5);

t.add(new MyType(..));
t.add(new MyType(..));

int count = t.size();  // returns 2

答案 1 :(得分:1)

Below code returns the filled count. 

package com.type;

public class MyType {
    private int id;
    private String name;

    public MyType(int id,String name){
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


    public static void main(String a[]){
        MyType[] t = new MyType[5];
        t[0] = new MyType(1,"Check1");
        t[1] = new MyType(2,"Check2");

        int count=0;
        for(int j =0; j<t.length ; j++){
           if ( t[j] != null ){
              ++count;
           }
        }       
        System.out.println(">>"+count); // Count is 2
        System.out.println(">>"+t.length); // Length is 5   
    }   
}