使用JAVA从某个数组中删除元素?

时间:2014-03-16 16:34:24

标签: java

问题:给定一个数组和一个值,删除该值的所有实例并返回新的长度。元素的顺序可以改变。除了新的长度之外你留下的东西并不重要。

我想通过使用JAVA ArrayList来解决这个问题。按代码列出如下:

import java.util.ArrayList;
import java.util.Arrays;


public class removeElement {

/**
 * @param args
 */
public int removeElement(int[] A, int elem) {

    int length = 0;
    ArrayList<Integer> al = new ArrayList<Integer>();
    Arrays.sort(A);
    //add elements in A to al
    for(int i:A){
        al.add(i);
    }
    //Remember arraylist's remove() is to remove first occurance of elements. 
    if(al.contains(elem)&&al.size() == 1){
        return 0;
    }
    while(al.contains(elem)){
        al.remove(elem);
    }
    length = al.size();
    return length;

}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    removeElement re = new removeElement();
    int[] A = {3, 3};
    int element = 3;
    System.out.println(re.removeElement(A, element));

}

}

结果显示:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
    at java.util.ArrayList.rangeCheck(ArrayList.java:571)
    at java.util.ArrayList.remove(ArrayList.java:412)
    at removeElement.removeElement(removeElement.java:24)
    at removeElement.main(removeElement.java:35)

我可以使用JAVA ArrayList来解决这个问题吗?或者我应该以另一种方式解决它?等待你的回复。非常感谢!

2 个答案:

答案 0 :(得分:5)

你可以更简单。

public int[] removeElement(int[] input, int deleteMe) {
    List<Integer> result = new LinkedList();

    for(int i=0;input.length;i++)
        if(deleteMe!=input[i])
            result.add(input[i]);

    return result.toArray(input);
}

答案 1 :(得分:2)

由于ArrayList中有两个重载的remove()方法,其中一个接受int参数作为对象的索引,另一个接受Object作为要删除的参数。

您已使用包装器对象删除该int元素。否则,将调用重载的remove(int index),并且您没有索引为3的任何元素,因此,您得到IndexOutOfBoundsException

while(al.contains(elem)){
   al.remove(new Integer(elem));
}