Java: ArrayListben hogy mozogsz?
Arrayben:
for (...) if X[i] == A { };
Ugyanezt kéne összehozni arraylisttel, mert törölnöm is kell, hogyha az if teljesül.
:D
Szerintem az 1. válaszoló bedobta a mély vízbe.
Nah akkor:
Legyen: "List<Integer> x = new ArrayList<>();" példány. Igen elfogadja így, mert már az Integer definiálva lett, így <>() elég. De kiírhatod, ha nagyon akarod.
x.add(6); // 0 indexen: 6-os
x.add(4); // 1 indexen: 4-es
x.add(7); // 2 indexen: 7-es
Az "add" triviálisan mindig a végére pakol, és azt a kulcsot adja neki, ami éppen aktuálisan szabad az utolsó foglalt után.
x.get(1); // 4-est adja vissza
x.remove(1); // 4-est adja vissza, és törli
Csak, hogy a "remove" esetén az 1-es index értéke felszabadul! Ezért minden ami utána van, azt rátolja. Tehát az 1-es indexnek újra lesz értéke, ami 7-es lesz, amiből az következik, hogy egy x.get(2) null-t fog vissza adni.
Tehát egy üres ArrayListre:
x.add(6); // 0 indexen: 6-os
x.add(4); // 1 indexen: 4-es
x.add(7); // 2 indexen: 7-es
x.remove(0); // törli a hatost, és 4-es átkerül a 0-s indexre és a 7-es az 1-esre.
x.remove(0); // törli a 4-est, és 7-es az 0-ás indexre kerül
x.remove(0); // törli a 7-est.
x.size(); // 0-t ad vissza, azaz ismételten üres listád van!
Ha van egy Listád amit for-ba teszel bele, vagy .stream()-el forEach/filter-ezel (Java8ban) akkor a 0-s indextől halad a nagyobb felé.
Ez mind szép és jó, de valójában két kérdés volt ez, és a második a fontosabb.
Ha törölni is akarsz közben, használj iterátort.
ArrayList<...> list = ...;
Iterator<...> iterator = list.iterator();
while (iterator.hasNext()) {
... s = iterator.next();
if (...) { i.remove(); }
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!