在Java中查找Object数组的逻辑大小

时间:2016-02-26 15:29:10

标签: java

与int数组不同,其中0用作占位符,是否有未使用的数组索引的占位符?我无法弄清楚我的生活如何使用for来查找我的数组的逻辑大小。谢谢!

4 个答案:

答案 0 :(得分:3)

对象类型数组(String[]Thread[]Object[]等)中条目的默认值为null。这个值类似于0数组中int[]的示例。

E.g:

Object[] objectArray = new Object[10];
System.out.println(objectArray[0] == null); // "true"

0中的int[]null中的Object[]之间存在差异,当然:0是您可以使用的有效int对于您可以使用int的所有内容。当然,null是一个不引用任何对象的对象引用,因此对于该对象引用实际上唯一可以做的就是查看它是null。 : - )

答案 1 :(得分:1)

确定数组的“逻辑”大小可能很棘手,主要是因为在所有情况下,数组必须具有有效值。没有“占位符”值表示“这里没有价值”。

原始整数类型的数组(bytecharshortintlong)被初始化为这些类型的默认值,0 ,正如你所说。

浮点类型的数组(floatdouble)被初始化为这些类型的默认值,0.0。

boolean的数组初始化为false

任何Object类型的数组都会初始化为null

在所有这些情况下,相应类型的变量可以采用默认值。那么如何判断这些是真正的值恰好等于默认值,还是应用程序实际上没有提供的默认值?您必须定义“占位符”对您的应用程序的含义,并确保相应地初始化阵列。

如果您的数组要保留数字,您可能会做的一件事就是使它们成为相应的Object类型,即使用Integer[]而不是int[]。这将导致数组初始化为null而不是0.在这样的数组中出现的任何0都是合法的0而不是初始化的工件。

如果null是合法值,您可以考虑使用Optional<Foo>[] value =而不是Foo[] value =。然后肯定没有设置null的任何数组元素。如果您使用value[n] != null,则可以检查value[n].isPresent()以确定是否存在真实的Foo

这里有很多可能性,但最重要的是你必须构建自己的机制。 Java中没有像“占位符值”这样的内容。

答案 2 :(得分:0)

arrayref.length是数组的大小。如果未获取/未指定,则基于数组类型,它将具有nullZERO

答案 3 :(得分:0)

int [] a = new int [10];
a[0] = 1;
a[1] = 2;
int logicalLength = 0;
for(int i=0; i<a.length; i++){
    if(a[i] != 0){ // Here a[i] != 0 changes depending on the type of the array
        logicalLength++;
    }
}
System.out.println(logicalLength);
System.out.println(a.length);

在数组中,我们不分配任何值,然后存储默认值。 int的默认值为0,double为0.0,String为null。