从Java中的Arraylist中删除特定元素?

时间:2016-02-25 09:10:27

标签: java arraylist

我有一个带有(String-)数组的Arraylist。现在我希望能够从Arraylist中删除特定元素。

以下是arraylist的示例:

0:  [Name, , , ]
1:  [Telefon, \(\d+\) \d+, DAFAE8, FF6262]
2:  [E-Mail, ^[a-zA-Z0-9]+(?:(\.|_)[A-Za-z0-9!#$%&'*+/=?^`{|}~-]+)*@(?!([a-zA-Z0-9]*\.[a-zA-Z0-9]*\.[a-zA-Z0-9]*\.))(?:[A-Za-z0-9](?:[a-zA-Z0-9-]*[A-Za-z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$, DAFAE8, FF6262]
3:  [Company, , , ]
4:  [Test, , , ]
5:  [Test2, , , ]
6:  [Test3, , , ]

现在我要删除第5个元素(包含Test2的数组)。我该如何做到这一点?

我已经尝试过以下事项:

public static List<String[]> removeSpecificElements(List<String[]> list, int i){
    list.remove(new Integer(i));
    return list;
}

这个不会抛出任何类型的异常,但也不起作用。

public static List<String[]> removeSpecificElements(List<String[]> list, int i){
    list.remove(i);
    return list;
}

这个抛出ArrayIndexOutOfBounds。

public static List<String[]> removeSpecificElements(List<String[]> list, int i){
    Iterator<String[]> itr = list.iterator();
    itr.next();
    for (int x = 0; x < i; x++){
        itr.next();
        System.out.println(itr);
    }
    itr.remove();
    return list;
}

这个总是删除第一个元素。

你能帮帮我吗?

2 个答案:

答案 0 :(得分:4)

  

现在我要删除第5个元素(包含Test2的数组)。我该如何做到这一点?

您需要使用

list.remove(i); // where i = 5 - 1, as the first element is 0.

如果你这样做

list.remove(new Integer(i));

它将查找您刚刚创建的对象,该对象在列表中不存在,因此您说它什么都不做。

简而言之,请勿将intInteger混淆,因为这些是不同的类型。

理想情况下,API会有一个不同的方法,如removeAt(int),以消除这种混淆的潜在来源,但现在改变它已经太晚了。

这什么时候有效?请考虑以下事项。

List<Integer> ints = new ArrayList<>();
ints.add(4);

List<MyType> list = (List) ints; // it works but don't do this.
boolean wasRemoved = list.remove(new Integer(4)); // true!!

答案 1 :(得分:3)

java.util.List#remove(int)应该可以工作,只是不要忘记列表是零索引的,即第5个元素被删除,调用list.remove(4)