让我有一个数字N.N将是数组的大小。
int numArray [] = new numArray[N];
但是,数组的内容将保持从1到正N的所有其他数字。这意味着在循环之后整个大小的N数组将不会满。因此,在for循环之后,我想修剪(或调整大小)数组,以便数组中不再有任何空插槽。
示例:
假设N = 5; 这意味着,在for循环之后,从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.
答案 0 :(得分:9)
您无法修剪数组。最快的方法是使用System.arraycopy将其复制到较小的方法,即almost always much faster than a for loop:
int somesize = 5;
int[] numArray = new int[somesize];
//code to populate every other int into the array.
int[] smallerArray = new int[somesize/2];
//copy array into smaller version
System.arraycopy(numArray, 0, smallerArray, 0, somesize / 2);
答案 1 :(得分:9)
创建后,您无法在Java中更改数组的大小。 但是,您可以创建一个所需大小的新数组。
另一个重要的一点是,您正在创建一个原语的数组:int
。基元不是对象,您不能将值null
分配给基元。
如果您希望能够将java.lang.Integer
中的条目设置为null
,则需要创建一个Integer[] numArray = new Integer[N];
数组。
int
这就是一个名为自动装箱的Java功能,几乎所有使用原始Integer
值的代码都适用于Integer[]
值。
步骤:
int[]
代替null
null
条目)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;
}
}
值复制到新数组。代码:
{{1}}
答案 2 :(得分:1)
我认为修剪本身的方法有点短。 剩下的就是找到合适的索引。
你可以这样做:
int someIndex = Arrays.asList(arr).indexOf(null);
arr = Arrays.copyOfRange(arr,0,someIndex);
答案 3 :(得分:0)
你肯定会更好地使用一些更合适的数据结构,例如一个列表或一组,具体取决于你以后的意图。这样你甚至不需要创建一个N尺寸的结构,所以你无论如何都要减少它。而是创建一个空列表并添加实际需要的元素
答案 4 :(得分:0)
import java.util.Arrays;
public static void main( String[] args )
{
int[] nums2 = {9,4,1,8,4};
nums2 =Arrays.copyOf(nums2,3);
for (int i : nums2) {
System.out.print(i+" ");
}
}
//输出
9 4 1