我的数字是N.N将是数组的大小.
int numArray [] = new numArray[N];
但是,数组的内容将保持从1到正N的每个其他数字.这意味着在循环之后整个大小N数组将不会满.因此,在for循环之后,我想修剪(或调整大小)数组,以便数组中不再有任何空插槽.
示例:
假设N = 5;
这意味着,从1到5的每个其他数字都将在数组中,如下所示:
int arr [] = new int [N];
int arr[0]=1; int arr[1]=3; int arr[2]= null; int arr[3]= null; int arr[4]= null;
现在,我想在for循环之后修剪(或调整大小),以便保留null的索引将消失,然后数组应该是:
int arr[0]=1; int arr[1]=3;
数组的大小现在是2.
解决方法
创建后,您无法在Java中更改数组的大小.
但是,您可以创建一个所需大小的新数组.
但是,您可以创建一个所需大小的新数组.
另一个重要的一点是,您正在创建一个基元数组:int.基元不是对象,您不能将值null赋给基元.
如果希望能够将其中的条目设置为null,则需要创建java.lang.Integer数组.
Integer[] numArray = new Integer[N];
这就是一个名为自动装箱的Java功能,几乎所有使用原始int值的代码也适用于Integer值.
脚步:
>使用Integer []而不是int []
>计算所需的大小(计算原始数组中的非空条目)
>分配所需大小的新数组
>遍历旧数组,并将其中的每个非空值复制到新数组.
码:
Integer[] oldArray = ...; // Step 2 int count = 0; for (Integer i : oldArray) { if (i != null) { count++; } } // Step 3 Integer[] newArray = new Integer[count]; // Step 4 int index = 0; for (Integer i : oldArray) { if (i != null) { newArray[index++] = i; } }