Mam ArrayList
przypuszczać list
, i posiada 8 pozycji AH i teraz chcę usunąć 1,3,5 położenie elementu zapisanego w tablicy int od list
jak mogę to zrobić.
Próbuję to zrobić
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
list.add("H");
int i[] = {1,3,5};
for (int j = 0; j < i.length; j++) {
list.remove(i[j]);
}
Ale po usunięciu pierwszej pozycji pozycja tablicy jest zmieniana, aw następnej iteracji usuwa zły element lub daje wyjątek.
List
) za pomocąequals("B")
,equals("D")
iequals("F")
. Pomyśl o tym.Odpowiedzi:
W tym konkretnym przypadku należy usunąć elementy w kolejności malejącej. Pierwszy wskaźnik
5
, potem3
, potem1
. Spowoduje to usunięcie elementów z listy bez niepożądanych skutków ubocznych.źródło
String
s, notInteger
s (niemniej zgadzam się z twoją obserwacją).ArrayList<E>
- dlaczego ktoś miałby chcieć usunąć obiekt z pozycjiArrayList
opartej wyłącznie na pozycji, zamiast testować, co jest w tej pozycji? OP może być używanyString
jako typ obiektu dla,ArrayList
ale twoja odpowiedź jest naprawdę zła praktyka kodowania dla typów generycznych, nawet jeśli rozwiązuje konkretną sytuację OP.ArrayList<String>
, nieArrayList<E>
.Możesz usunąć elementy z
ArrayList
używaniaListIterator
,źródło
źródło
Jak wspomniano wcześniej
jest prawdopodobnie jedynym bezpiecznym sposobem usuwania elementów listy podczas pętli.
Aby lepiej zrozumieć usuwanie elementów za pomocą iteratora, spróbuj przyjrzeć się temu wątkowi
źródło
Zakładam, że tablica i jest posortowana w górę, oto inne rozwiązanie z Iteratorem, jest bardziej ogólne:
źródło
Co powiesz na to? Po prostu pomyśl o tym
A wynik był-
źródło
Spróbuj w ten sposób
źródło
źródło
Jeśli użyjesz "=", zostanie utworzona replika dla oryginalnej listy arraylisty w drugiej, ale odniesienie jest takie samo, więc jeśli zmienisz na jednej liście, druga również zostanie zmodyfikowana. Użyj tego zamiast „=”
źródło
remove (int index) metoda arraylist usuwa element na określonej pozycji (indeks) na liście. Po usunięciu elementów arraylist przesuwa kolejne elementy w lewo.
Oznacza, jeśli arraylista zawiera {20,15,30,40}
Nazwałem metodę: arraylist.remove (1)
wtedy dane 15 zostaną usunięte, a 30 i 40 te dwa elementy zostaną przesunięte o 1.
Z tego powodu musisz najpierw usunąć element arraylist o wyższym indeksie.
A więc… dla danej sytuacji… kod będzie…
źródło