java - 如何将没有空值的元素移动到新数组
问题描述
所以我要做的是从数组中删除和元素,并将所有现有元素移动到没有空元素的新数组中。我已经将我想要的元素设置为空。但是当我尝试使用这段代码时,它只将第一个元素传输到数组中,没有其他元素被移动。我究竟做错了什么?
旁注:我不允许使用 ArrayList。
Object[] temp = new Object[sList.length-1];
for (int j = 0; j < sList.length; j++){
if (sList[j] != null) {
temp[j] = sList[j];
}
}
解决方案
不要预先分配你的数组。只需将非空值移动到数组的前面,保持顺序。
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
等,您可能也不应该使用其他更高级的方法。
推荐阅读
- cordova - 离子科尔多瓦资源——强制不起作用
- c# - 为什么我的枚举到类转换的自定义成员解析器不起作用?
- r - 尝试使用 SelectInput 从数据框中求和
- java - eclipse 不启动 - eclipse.ini 错误?
- graph-databases - Gremlin 删除多个顶点
- android - Android:AlertDialog 显示在模拟器上的按钮单击上,但不在我的手机上
- jquery - jQuery隐藏/显示每个选择标签
- c# - 在 linq 中添加带有计数功能的额外列以进行查询?
- multithreading - 从另一个线程调用委托的返回结果
- arrays - Javafx:FXCollections.concat() 警告