如何将没有null值的元素移动到新数组中



所以我要做的是从数组中删除和元素,并将所有现有元素移动到没有null元素的新数组中。我已经将想要的元素设置为null。但是,当我尝试使用此代码时,它只将第一个元素转移到数组中,其他元素都不会移动。我做错了什么?

附带说明:我不允许使用ArrayList。

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

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

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具有没有null的元素的数量。所以用它来创建一个新的数组。

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等,你可能也不应该使用其他更高级的方法。

使用List<Object>创建目标Array

List<Object> result = new ArrayList<>();
for (int j = 0; j < sList.length; j++){ 
if (sList[j] != null) {
result.add(sList[j]);
}
}
Object[] temp = result.toArray();

更通用的解决方案是首先计算源阵列中null的数量:

int nullCount = 0;
for (int i = 0; i < sList.length; i++) {
if (null == sList[i]) {
nullCount++;
}
}
Object[] temp = new Object[sList.length - nullCount];
for (int i = 0, j = 0; i < sList.length; i++) {
Object obj = sList[i];
if (null != obj) {
temp[j++] = obj;
}
}

流API也可用于此任务(从技术上讲,此处不使用ArrayList:(:

Object[] temp = Arrays.stream(sList).filter(Objects::nonNull).toArray(Object[]::new);

相关内容

  • 没有找到相关文章

最新更新