我有一个带有(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;
}
这个总是删除第一个元素。
你能帮帮我吗?答案 0 :(得分:4)
现在我要删除第5个元素(包含Test2的数组)。我该如何做到这一点?
您需要使用
list.remove(i); // where i = 5 - 1, as the first element is 0.
如果你这样做
list.remove(new Integer(i));
它将查找您刚刚创建的对象,该对象在列表中不存在,因此您说它什么都不做。
简而言之,请勿将int
与Integer
混淆,因为这些是不同的类型。
理想情况下,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)