首页 > 解决方案 > 如何将没有空值的元素移动到新数组

问题描述

所以我要做的是从数组中删除和元素,并将所有现有元素移动到没有空元素的新数组中。我已经将我想要的元素设置为空。但是当我尝试使用这段代码时,它只将第一个元素传输到数组中,没有其他元素被移动。我究竟做错了什么?

旁注:我不允许使用 ArrayList。

   Object[] temp = new Object[sList.length-1];

   for (int j = 0; j < sList.length; j++){ 
         if (sList[j] != null) {
            temp[j] = sList[j];
         }
      } 

标签: javaarraysnullmove

解决方案


不要预先分配你的数组。只需将非空值移动到数组的前面,保持顺序。

Integer[] array = {null,1,2,3,null, 4,5,null, 6};
System.out.println("Before move: " + Arrays.toString(array));
int i = 0;
for (int k = 0; k < array.length; k++) {
    if (array[k] == null) {
        continue;
    }
    array[i++] = array[k];
}
System.out.println("After move: " + Arrays.toString(array));

现在i有没有空值的元素数量。所以用它来创建一个新数组。

Integer[] result = Arrays.copyOf(array,i);
System.out.println("New Array: " + Arrays.toString(result));

印刷

Before move: [null, 1, 2, 3, null, 4, 5, null, 6]
After move: [1, 2, 3, 4, 5, 6, 5, null, 6]
New Array: [1, 2, 3, 4, 5, 6]

如果你不被允许使用Arrays.copy() ,你可以这样做。

Integer[] result = new Integer[i];
for (int k = 0; k < i; k++) {
   result[k] = array[k];
}

注意:我没有包含其他更简单的方法(例如流、集合),因为如果您不能使用ArrayList等,您可能也不应该使用其他更高级的方法。


推荐阅读