1

我正在用 java 编码,我需要创建一个函数来返回当前在 ArrayList 中的数据对象的数量。目前我有这个:

  int count = 0;
    for (int i = 0; i < data.length; i++)
    { 
        if (data[i] != null)
        {
            count ++;
        }
    }
    return count;

但问题是包含空数据的数组列表是可以接受的,我必须将它们的空数据计入该计数器。如何包含此数组中间的空数据,而不是不应计算的空数据?

例如,我有一些测试代码将 (8),null,null,(23),(25) 添加到数组中,当初始数组大小为 10 时,此函数应返回 5。

4

3 回答 3

2

我将假设您使用的是常规数组(您的问题对此有些模棱两可)。向后遍历数组,直到找到一个非空元素:

public static int count(Object[] a) {
    int i = a.length - 1;
    for (; i >= 0 ; i--)
        if (a[i] != null)
            break;
    return i + 1;
}

你也可以有

public static <T> int count(T[] a) {
    int i = a.length - 1;
    for (; i >= 0 ; i--)
        if (a[i] != null)
            break;
    return i + 1;
}

让我们使用与您提供的示例类似的示例对其进行测试:

Object[] a = new Object[10];
a[0] = new Object();
a[3] = new Object();
a[4] = new Object();
System.out.println(count(a));

输出:

5
于 2012-11-06T23:00:50.573 回答
0

您将需要两个单独的计数器。第一个将正常计数。当您找到null数据时,第二个开始计数。然后当你找到一个非空数据时,只需将第二个计数器加到第一个计数器上,然后继续用第一个计数器计数,直到你再次找到一个空值。

于 2012-11-06T22:58:20.583 回答
0
int count = 0;
for (int i = data.length - 1; i >= 0; i--)
    if (data[i] != null || count > 0)
        count += 1;
return count;

至少这就是我理解您的要求的方式 - 计算空值,但尾随空值除外。

但也许这实际上不是你的意思?

编辑

除非您实际使用ArrayList(如 Jon 所问),否则 where.size()容量不同,并将计算所有添加的元素(包括空值)。实际上,您甚至无法从ArrayList.

于 2012-11-06T22:59:50.630 回答