2016-02-26 52 views
1

因此,与使用0作为占位符的int数组不同,有没有用于未使用数组索引的占位符?我无法弄清楚我的生活如何使用一个找到我的数组的逻辑大小。谢谢!在Java中查找对象数组的逻辑大小

+0

你好,你可能会在这个[post]找到答案(http://stackoverflow.com/questions/9297899/where-is-arrays-length-property-defined) – Romain

+2

依赖数组条目的值,如null或0作为“未使用”的指示是人们应该考虑两次的东西。使用一个可以增长的集合(例如ArrayList)来存储相关条目。如果索引值是相关的(并且您需要“空白”),请考虑使用地图。 – laune

回答

3

在一个类型的对象阵列(String[]Thread[]Object[]等)中的条目的默认值是null。这就是int[]阵列中的0示例的值。

例如为:

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

0之间int[]nullObject[]当然有差别,:0是一个有效的int你可以使用所有可以使用int S为的事情。当然,null是一个不涉及任何对象的对象引用,所以实际上,您可以使用该对象引用完成的唯一一件事就是看它是否为null。 :-)

0

arrayref.length是数组的大小。如果取消未分配/未分配,它将根据阵列类型具有nullZERO

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为空。

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中并没有像“占位符值”那样的内容。