从数组中删除元素

时间:2011-02-23 23:17:37

标签: java arrays

  

可能重复:
  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[]);
}

3 个答案:

答案 0 :(得分:1)

你很亲密,但是:

  • 您的仿制品搞砸了(List<>语法无效)
  • 您的比较只是添加了元素,如果它小于零(而不是添加它,如果它不等于零)
  • 您正在调用错误的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;
}

答案 1 :(得分:1)

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

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

您可以使用列表执行此操作。你最好的办法是创建一个整数列表;添加非零元素;然后使用toArray从列表中创建一个数组。

答案 2 :(得分:0)

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

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

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

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