java - 移动值以清除数组中的空间隙

标签 java arrays

我有一个数组,我有一个方法可以删除数组中的项目。因此我们可以删除数组索引 5 中的任何内容。然后索引 5 将保留为空,从而导致问题。我的目标是能够将所有值向左移动,然后删除该空闲空间,使其成为正确的数组大小。这意味着我们不会在数组中有任何空值。

我的尝试:

  for (int j = 0; j< myArray.length; j++){
        if (myArray[j] == null){
            myArray[j] =MyArray[j+1];
            break;
        }
    }

由于显而易见的原因,这不起作用。我知道我哪里错了。我正在用数组中的下一个值替换空值。所以我在数组中给出了两个彼此相邻的相同值。这显然不是我想要的。但是,我似乎无法弄清楚该怎么做。有人告诉我我没有足够地遍历数组。有什么建议/建议吗?

谢谢

最佳答案

首先统计数组中非空元素的个数:

int numOfElements = 0;
for (int i=0; i<myArray.length; i++)
    if (myArray[i] != null)
        numOfElements++;

然后,分配一个新的(可能更小的)数组:

Type[] myNewArray = new Type[numOfElements];
// Replace 'Type' with the type of your array

最后,将所有非空元素复制到新数组中:

for (int i=0,j=0; i<myArray.length; i++)
    if (myArray[i] != null)
        myNewArray[j++] = myArray[i];

如果有必要,那么此时你可以设置myArray = myNewArray

关于java - 移动值以清除数组中的空间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23299407/

相关文章:

java - 在 XPages Domino Java 中回收 Item 对象

java - Gcm Intent Service 在 Gcm pubsub 获取空指针异常

python - numpy数组被切片两次

java - 为什么array = array1 等于array1 = array?

java - 使用java线程的多监视器同步

java - 解析不同格式的日期的推荐方法是什么?

java - '&quot ;' instead of normal quotes ("") 从 Jersey 返回 XML

c - 当编译时宽度未知时,如何编写接受二维数组的函数?

arrays - 将字符串从数组传递给函数的类型不匹配错误(在 VBA 中)

ruby-on-rails - 什么时候 ruby​​ 数组计数不等于数组中的元素数?