我在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.
答案 0 :(得分:2)
我将假设您正在使用常规数组(您的问题对此有些模棱两可)。向后遍历数组,直到找到非null元素:
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
答案 1 :(得分:0)
您需要两个独立的计数器。第一个将正常计算。当您找到null
数据时,第二个开始计数。然后,当您找到非空数据时,只需将第二个计数器添加到第一个计数器并继续使用第一个计数器进行计数,直到再次找到空值。
答案 2 :(得分: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所问),.size()
与容量不同,并且会计算所有添加的元素(包括空值)。实际上你甚至无法从ArrayList
获得容量。