Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
Příspěvky - raskal
17
« kdy: 21. 09. 2019, 02:32:34 »
Mám nějaký ArrayListový seznam a k němu jsem dostal jsem dostal pole, které obsahuje indexy, jež určují, které prvky se z ArrayListového seznamu mají vymazat. Když ale začnu v cyklu promazávat ten seznam, tak dojde k rozhození indexace a tím pádem jsou ty původní indexy neplatné.
Existuje nějaký způsob, jak rychle naráz vymazat určité prvky z ArrayListu, které jsou specifikovány nějakou množinou prvků?

public static void main(final String[] args) {
final ArrayList<Object> arrayList = new ArrayList<Object>(Arrays.asList("a", "b", "c", "d", "e"));
System.out.println(arrayList);
final int[] toRemoveIdxs = new int[]{0, 3, 1, 5};
Arrays.sort(toRemoveIdxs); // pokud toRemoveIdxs jsou nesetrizeny
{ // algoritmus odstraneni podle indexu
int cnt = 0;
for (int i = 0, toRemovePtr = 0; i < arrayList.size(); i++) {
if (cnt > 0) {
arrayList.set(i - cnt, arrayList.get(i));
}
if (toRemovePtr < toRemoveIdxs.length) {
int toRemoveIdx = toRemoveIdxs[toRemovePtr];
if (toRemoveIdx == i) {
cnt++;
toRemovePtr++;
}
}
}
// odseknu zbytek
arrayList.subList(arrayList.size() - cnt, arrayList.size()).clear();
} //
System.out.println(arrayList);
}