作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在从二维数组中删除空值时遇到了一些问题。我仍然是编程的初学者。我在网上寻找解决方案,但没有找到任何有用的东西。
这是在大学练习,所以将数组的名称更改为“array”,它的对象也是如此。这是我的:
import java.util.ArrayList;
public class Compact
{
public static void Compact(object[][] array)
{
ArrayList<object> list = new ArrayList<object>();
for(int i=0; i<array.length; i++){
for(int j=0; j < array[i].length; j++){
if(array[i][j] != null){
list.add(array[i][j]);
}
}
}
array = list.toArray($not sure what to typ here$);
}
}
我基于为一维数组找到的解决方案,但问题是列表是一维的,那么我如何获取二维数组的结构? "new"数组必须更小,没有空值。
我想为 array[i] 制作一个列表,为 array[i][j] 制作一个列表,但是我如何将它们再次合并为 1 个二维数组?
非常感谢所有帮助!
========================================
编辑:这是解决方案,谢谢大家:
public void compact(Student[][] registrations)
{
for(int i=0; i < registrations.length; i++){
ArrayList<Student> list = new ArrayList<Student>(); // creates a list to store the elements != null
for(int j = 0; j < registrations[i].length; j++){
if(registrations[i][j] != null){
list.add(registrations[i][j]); // elements != null will be added to the list.
}
}
registrations[i] = list.toArray(new Student[list.size()]); // all elements from list to an array.
}
}
最佳答案
Object[][]
对应的可重定尺寸结构是 List<List<Object>>
.
另请注意,Java 中的类按照惯例始终以大写字母开头。因此应该是Object
,而不是 object
.
二维数组并不是真正的二维数组。它是一个数组的数组。故外阵一,内阵数。如果你只是想从内部数组中删除空值,你可以在迭代过程中只使用一个临时列表来保存当前内部数组的元素。
for(int i = 0; i < array.length; i++) {
Object[] inner = array[i];
List<Object> list = new ArrayList<Object>(inner.length);
for(int j = 0; j < inner.length; j++){
if(inner[j] != null){
list.add(inner[j]);
}
}
array[i] = list.toArray(new Object[list.size()]);
}
如果外部数组包含 null 内部数组,并且您还想删除它们,那么您应该使用 List<Object[]>
:
List<Object[]> outerList = new ArrayList<Object[]>(array.length);
for(int i = 0; i < array.length; i++) {
Object[] inner = array[i];
if (inner != null) {
List<Object> list = new ArrayList<Object>(inner.length);
for(int j=0; j < inner.length; j++){
if(inner[j] != null){
list.add(inner[j]);
}
}
outerList.add(list.toArray(new Object[list.size()]));
}
}
array = outerList.toArray(new Object[outerList.size()][]);
关于java - 如何从二维数组中删除空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907929/
我是一名优秀的程序员,十分优秀!