有效尺寸与阵列的实际尺寸,如何了解有效尺寸?

时间:2014-11-23 09:00:32

标签: java arrays variable-length-array

我想另一种问同样问题的方法是如何知道数组中空指向元素的数量?

int[] arrayOfEffectiveSizeTen = new int[10];
// some black box in which the content of the array is changed
calculateAverage(arrayOfEffectiveSizeTen) //how can you do this for instance?

你真的必须在for i < arrayOfEffectiveSizeTen.length循环中做这样的事情吗?

arrayOfEffectiveSizeTen[i] == null ? nullPointingElement++ : elementInArray++;

我找不到任何重复的问题。我觉得很奇怪。在我的特殊情况下,它是关于Java的。

2 个答案:

答案 0 :(得分:2)

在Java中,只要你创建一个数组,基本上就是你在这里提到的primitive types like int,byte,etc.,所有数组元素都会自动初始化为0.因此,非空元素的讨论就此结束。

primitive data-types的情况下,所有这些元素都不指向null,但是在reference datatypes的情况下,除非明确指定OR,否则这些值指向null,除非编码器强制它通过赋值来执行一些其他参数。但是,即使这会导致Java中的运行时异常。因此,在没有初始化的情况下,以这种方式阻止使用引用数据类型,因为它会导致NUllPointerException。

对于参考数据类型,我们

String sarray[]={"Hello","World"};  
// see here array initialised,else would have produced NullPointerException
for(int i=0;i<sarray.length;array++){
   // do Something
}

因此,对于Java中的原始数据类型,我们总是这样做

for(int i=0;i<array.length;array++){
   // do Something
}

这总是可能是在Java中访问数组元素的方式,根据定义,所有元素都将构成一个数组,因此,

Effective size of Array in Java = Actual size of Array in Java

答案 1 :(得分:2)

在Java中,您必须区分基本类型和引用类型。

使用new <sometype>[size]初始化数组时,其所有元素都设置为默认值。对于intlongbyte等,值为0.因此,您可以在此类数组上运行平均函数,并且平均值为0.

如果类型为布尔值,则初始值为false

如果类型是任何对象类型(类),包括StringInteger等众所周知的类型,则默认值都为空。

所以基本上,当你创建一个数组时,如果它是一个原始类型,那么你可以根据你的定义说它的长度是它的有效大小&#34;,因为{{ 1}}或0是合法值。

如果它是引用类型,那么当你创建它时,它的有效大小 - 按你的定义 - 为零,因为没有非null元素。

但是,使用false并不是初始化数组的唯一方法。例如,您可以使用以下内容:

new

请注意,这是一个Integer[] intObjects = { 5, 17, 32 }; 类型的数组,它是一种引用类型,而不是基本类型Integer。如果您使用int初始化它,那么您将拥有所有空值。但是当我按照我展示的那样对它进行初始化时,它包含对三个new Integer[3]对象的引用,这三个对象分别包含数字5,17和32。所以你可以说它的有效尺寸与它的长度相同。

但是,请注意,写下这样的内容也是合法的:

Integer

考虑到所有这些,问题的答案&#34;我怎么知道数组中有多少空值&#34;是:

  1. 如果数组是基本类型,则没有空值。它包含合法值,即使它们为零/假。
  2. 如果数组是引用类型,并且您使用Integer[] intObjects = { 5, null, 32 }; 初始化它,则其所有元素都为空。
  3. 如果数组是引用类型,并且您使用new初始化它,或者自初始化以来已分配了值,则除了循环和计数之外,您无法知道其中有多少空值。 / LI>