2016-02-25 3 views
0

У меня есть Arraylist с (String-) массивами в нем. Теперь я хочу иметь возможность удалить определенный элемент из Arraylist.Удалить определенный элемент из Arraylist в Java?

Вот пример 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

Существует множество вопросов о том, как удалить элементы из списка на этом сайте. Вы сначала искали их? – Raedwald

ответ

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!! 
+0

Я мог бы сказать, что 'новый Integer (i)' * не может * существовать в списке (а не просто нет) из-за дженериков. –

+0

@ AndyTurner на самом деле может существовать, если вы неправильно использовали дженерики. –

+0

Спасибо, это заставило меня осознать мою ошибку. (в основном это было то, что я сначала выбираю визуальный элемент, удаляю его, а затем пытаюсь удалить данные за элементом с теперь несуществующим выбором ...) – WorkHardDieSoon

3

java.util.List#remove(int) должен работать, только не забывайте, что списки нулевого индекса, то есть пятый элемент удаляется вызовом list.remove(4)

Смежные вопросы