【问题标题】:Delete element from array [duplicate]从数组中删除元素[重复]
【发布时间】:2011-07-03 04:22:42
【问题描述】:

可能重复:
Removing an element from an Array (Java)

有没有办法可以去掉数组中的一些元素。 例如,如果我有这个数组

int testArray[] = {0,2,0,3,0,4,5,6}

有没有一种“快速”的方法来摆脱等于 0 的元素

int resultArray[] = {2,3,4,5,6}

我尝试了这个功能,但我在使用列表时迷路了

public int[] getRidOfZero(int []s){
   List<> result=new ArrayList<>();
   for(int i=0; i<s.length; i++){
     if(s[i]<0){
       int temp = s[i];
       result.add(temp);
     }
   }
   return result.toArray(new int[]);
}

【问题讨论】:

  • 因为这个问题专门询问删除数组中间的元素,所以真的不是一回事——投票重新打开。

标签: java arrays


【解决方案1】:

Java 数组无法调整大小。您需要创建一个新数组。

计算数组中的非零元素。创建一个该大小的新数组。将元素从旧数组复制到新数组,跳过零个元素。

您可以使用列表来做到这一点。最好的办法是创建一个整数列表;向其中添加非零元素;然后使用 toArray 从列表中创建一个数组。

【讨论】:

    【解决方案2】:

    你已经很接近了,但是:

    • 您的泛型搞砸了(List&lt;&gt; 在语法上无效)
    • 您的比较只是添加小于零的元素(而不是添加不等于零的元素)
    • 您调用了错误的toArray() 方法。因为ints 是原语,您必须自己将列表转回数组。

    public int[] getRidOfZero(int[] s) {
        List<Integer> result = new ArrayList<Integer> ();
        for (int i : s) {
            if (i != 0) {
                result.add(i);
            }
        }
    
        int[] toReturn = new int[result.size()];
        for (int i=0; i<result.size(); i++) {
            toReturn[i] = result.get(i);
        }
    
        return toReturn;
    }
    

    【讨论】:

    • 我猜这里的 temp 必须是一个 Integer 对象
    • @Julio:对不起,这是我的错字。固定。
    • toArray 返回一个 Object[] 数组,您的方法返回 int[]。基元使这更加痛苦。
    • @Julio - 不,tempi 都不需要是 Integer 对象,这要感谢 Java autoboxing 的魔力。
    • @Yishai:嗯……你说得对。固定。
    【解决方案3】:

    由于您从数组开始,您需要创建一个新数组并从旧数组中复制项目,不包括零。

    如果你一次删除一堆零,这会很快。

    否则,您需要从双向链接的LinkedList 开始。

    LinkedList 有一个迭代器,允许您沿着列表移动并删除元素,这将是一个恒定时间的操作。

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 2010-10-13
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      相关资源
      最近更新 更多