你可以通过将一个元素放在数组的末尾并减小数组的大小来从数组中删除它吗?

时间:2015-10-10 16:37:56

标签: java arrays

min-width:940px

这样做的目的是在数组中找到一个对象然后将其删除?有可能??

5 个答案:

答案 0 :(得分:2)

无法更改数组的长度。回想一下,数组是一个静态数据结构,其大小是事先确定的。此数据结构不支持增加或减少。必须根据用例增加或减小大小这一事实意味着他们已经选择了错误的数据结构。他们应该使用ArrayList。

无论如何,回到你的问题,你可以模拟尺寸缩小'通过维护一个变量,您可以跟踪数组索引并减小此变量的大小。这可以让你给人一种缩小阵列的印象。 您提供的代码也是如此。但请注意,您应该使用此修改后的索引来跟踪数组的内容。

for(int i = 0; i < bag.length; i++)
      {
        if(bag[i].equals(a))
        {
            tmp = bag[i];
            bag[i] = bag[bag.length-1];
            bag[bag.length-1] = tmp;
            numElements--;
            break;
        }
}

每当给定指数的特定行李等于所讨论的物品,即&#39; a&#39;时,我们交换元素,以便当前要移除的行李元素移动到最后一个,我们也缩小尺寸我们的新索引 - numElements乘以1来模拟这个。

如果您有完整的代码,请考虑在该计划的最后添加以下代码段 ,以便更多地了解这一点:

// Simulation of the array shrinking.
for(int i = 0; i < numElements; i++)
{    
    System.out.println( bag[i] );
}

// Movement of uninteresting elements to the end of the array.
for(int i = 0; i < bag.length; i++)
{
    System.out.println( bag[i] );
}

答案 1 :(得分:0)

无法更改数组的长度。您可以使用数组的最后一个元素覆盖要删除的元素,然后将数组的第一个bag.length - 1元素复制到长度为bag.length - 1的新数组。

for(int i = 0; i < bag.length; i++) {
    if(bag[i].equals(a)) {
        bag[i] = bag[bag.length-1];
        bag = Arrays.copyOf (bag, bag.length - 1);
        break;
    }
}

答案 2 :(得分:0)

public static String[] removeElements(String[] input) {
List<String> result = new ArrayList<String>();

String deleteValue = "somevalue";
for(String item : input)
    if(!deleteValue .equals(item))
        result.add(item);

return result.toArray(input);
}

这是一种可以将其融入程序的方法。

答案 3 :(得分:0)

您无法减小数组的大小。好的没问题!你可以创建自己的数据结构,支持这个权利吗? 现在,创建一个名为say MyArray的类,其函数包括increaseLenght(int)和decreseLength(int)。如果你愿意的话,尝试一下,肯定会很有趣。

答案 4 :(得分:-1)

您无法减小阵列的大小。数组是固定长度的。您可以做的是有一个变量,指示您正在使用的数组的条目数。这就是您使用numElements所做的事情。标准类ArrayList就像这样实现。数据保存在一个数组中,并使用私有字段size。使用ArrayList时,删除元素时,右侧的所有元素都向左移动。但是我也喜欢你的想法。

我建议改变2次。

  1. 改为生成最后一个元素null。如果要删除元素,为什么它仍然需要在数组中?
  2. 使用numElements - 1而不是bag.length-1,因为数组可能更大。
  3. 通过这些更改,它变为:

    for(int i = 0; i < bag.length; i++)
    {
        if(bag[i].equals(a))
        {
            bag[i] = bag[numElements-1];
            bag[numElements-1] = null;
            numElements--;
            break;
        }
    }